Considerando as tabelas A e B de um banco de dados relacional e que os campos id dessas tabelas referem-se às suas chaves primárias, julgue o item seguinte.
A execução da consulta SQL a seguir retornará todos os campos id de B que não existem em A.
1
select A.id
2
from table_A A
3
left join table_B B on A.id = B.id
4
where B.id is null
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Junções SQL: LEFT JOIN e a busca por registros sem correspondência
Gabarito: ERRADO (alternativa E). A consulta apresentada retorna os campos id de A que não existem em B, e não o contrário como afirma o enunciado. O LEFT JOIN preserva todas as linhas da tabela à esquerda (table_A A), e a condição WHERE B.id IS NULL filtra exatamente as linhas de A que não encontraram correspondência em B. Para obter os id de B que não existem em A, seria necessário inverter a ordem das tabelas no LEFT JOIN (ou usar RIGHT JOIN).
O LEFT JOIN (junção externa à esquerda) é um dos tipos de junção em SQL que retorna todas as linhas da tabela à esquerda (a primeira mencionada no FROM/JOIN), combinadas com as linhas correspondentes da tabela à direita quando existem. Quando não há correspondência, as colunas da tabela à direita são preenchidas com NULL. É exatamente esse comportamento que permite identificar registros "órfãos" — aqueles que não possuem par na outra tabela.
A lógica da consulta é: primeiro, fazemos a junção entre A e B, mantendo todas as linhas de A. Depois, filtramos apenas as linhas onde B.id IS NULL, ou seja, onde não houve correspondência em B. O resultado são os id de A que não aparecem em B. É um padrão clássico e muito cobrado em provas para encontrar registros sem correspondência.
Para entender melhor, considere um exemplo concreto. Suponha que a tabela A tenha os ids {1, 2, 3} e a tabela B tenha os ids {2, 3, 4}. O LEFT JOIN de A com B produziria:
A.id
B.id
1
NULL
2
2
3
3
Aplicando o filtro WHERE B.id IS NULL, restaria apenas a linha com A.id = 1. Portanto, a consulta retorna {1}, que são os ids de A que não existem em B. Para obter os ids de B que não existem em A (que seriam {4}), a consulta correta seria:
SELECT B.id
FROM table_B B
LEFT JOIN table_A A ON B.id = A.id
WHERE A.id IS NULL
A pegadinha desta questão está exatamente na inversão da ordem das tabelas. A banca apresenta uma consulta que retorna os elementos exclusivos da tabela A, mas o enunciado afirma que retornará os elementos exclusivos da tabela B. É uma armadilha clássica que testa se o candidato compreende o papel da tabela à esquerda no LEFT JOIN.
Guarde esta regra de ouro: no LEFT JOIN, a tabela à esquerda é a "preservada" — todas as suas linhas aparecem no resultado. O WHERE ... IS NULL filtra as linhas dessa tabela preservada que não têm par na outra. Portanto, a consulta retorna os elementos exclusivos da tabela que está à esquerda no JOIN.
Item — ❌ ERRADO
A afirmação do enunciado está incorreta. A consulta apresentada retorna os id de A que não existem em B, e não os id de B que não existem em A, como afirma o item.
O erro está na ordem das tabelas no LEFT JOIN. Como a tabela table_A A está à esquerda, todas as suas linhas são preservadas. A condição WHERE B.id IS NULL seleciona as linhas de A que não encontraram correspondência em B. O resultado são os ids exclusivos de A.
Para retornar os ids de B que não existem em A, a consulta deveria ser:
SELECT B.id
FROM table_B B
LEFT JOIN table_A A ON B.id = A.id
WHERE A.id IS NULL
Ou, alternativamente, usando RIGHT JOIN:
SELECT B.id
FROM table_A A
RIGHT JOIN table_B B ON A.id = B.id
WHERE A.id IS NULL
NÃO CAIA NESSA!
A banca inverteu a ordem das tabelas no LEFT JOIN para confundir o candidato. A consulta retorna os elementos exclusivos da tabela à esquerda (A), não da direita (B). Lembre-se: no LEFT JOIN, a tabela à esquerda é a que tem todas as suas linhas preservadas. Se a pergunta pede os elementos exclusivos de B, o LEFT JOIN deve ter B à esquerda (ou usar RIGHT JOIN com A à esquerda).