Dadas duas tabelas relacionais idênticas quanto à seguinte ...
Id Nome 1 N1 2 N2 3 N3 4 N4
Sabendo que a chave primária de identificação única é a coluna Id (válido para ambas as tabelas), a seguinte expressão SQL:
SELECT TabA.Nome, TabB.Nome FROM TabA, TabB WHERE TabA.Id NOT IN (TabB.Id) exibirá como resultado
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a E - 12 linhas.
Para entender essa questão, é importante compreender o conceito de junção cartesiana em SQL e o uso da cláusula WHERE para filtrar resultados. Uma junção cartesiana ocorre quando você faz uma consulta que combina cada linha de uma tabela com cada linha de outra tabela. No caso desta questão, temos duas tabelas idênticas TabA e TabB, cada uma com 4 linhas. A junção cartesiana entre elas sem nenhum filtro resultaria em 4 (linhas de TabA) x 4 (linhas de TabB) = 16 linhas no total.
Entretanto, a consulta SQL apresentada na questão utiliza a cláusula WHERE para filtrar as linhas onde o Id de TabA NÃO está presente em TabB. Como as tabelas são idênticas, todos os Ids de TabA estão em TabB. Isso significa que, se aplicado literalmente, o filtro deveria retornar zero linhas, pois todos os Ids de TabA têm correspondência em TabB.
Contudo, o que pode confundir é que a consulta não está fazendo um filtro simples de TabA contra TabB, mas sim realizando uma operação de junção cartesiana antes do filtro. Portanto, para cada linha de TabA, o SQL verifica o filtro NOT IN em todas as linhas de TabB. Isso resulta em linhas onde o Id de TabA é diferente do Id em TabB. No fim, como são 4 Ids na TabA e 4 na TabB, mas cada Id só é igual a si próprio, teremos 3 possibilidades de combinação por linha da TabA. Assim, 4 (linhas de TabA) x 3 (combinações possíveis em TabB) = 12 linhas.
Portanto, a consulta SQL exibirá 12 linhas como resultado, correspondentes aos pares de nomes onde os Ids são diferentes entre TabA e TabB.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo