Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2026

Banco de DadosSQL
Código
gp018308
Banca
Quadrix
Órgão
CREF - 11ª Região (MS-MT)
Ano
2026
Cargo
Analista de Suporte em Tecnologia da Informação

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.


Imagem associada para resolução da questão

  1. CCerto
  2. 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 diferença de conjuntos

Gabarito: ERRADO (letra E). A consulta descrita no enunciado, ao usar um LEFT JOIN entre as tabelas A e B, retorna todos os registros da tabela A (a tabela à esquerda), e não os id de B que não existem em A. Para obter os id de B que não estão em A, seria necessário inverter a ordem das tabelas no LEFT JOIN (colocando B à esquerda) ou utilizar um RIGHT JOIN com A à esquerda, filtrando os nulos de A. A operação que retorna exatamente os elementos de um conjunto que não pertencem a outro é a diferença da álgebra relacional, que em SQL pode ser implementada com NOT IN, NOT EXISTS ou LEFT JOIN ... WHERE ... IS NULL.

O LEFT JOIN é uma das junções externas (outer joins) do SQL. Para entender por que a afirmação está errada, é preciso dominar a diferença entre junções internas e externas. Uma junção interna (INNER JOIN) retorna apenas as linhas que possuem correspondência nas duas tabelas. Já uma junção externa (LEFT JOIN, RIGHT JOIN, FULL JOIN) preserva as linhas de uma das tabelas (ou de ambas) mesmo quando não há correspondência na outra, preenchendo os campos da tabela sem correspondência com NULL.

No caso do LEFT JOIN entre A e B, a tabela à esquerda (A) tem todas as suas linhas preservadas. Para cada linha de A, o banco busca as linhas correspondentes em B. Se não houver correspondência, os campos de B vêm como NULL. Portanto, o resultado contém todos os id de A, e apenas os id de B que possuem correspondência em A. Os id de B que não existem em A simplesmente não aparecem no resultado, a menos que haja uma linha em A com NULL em B — o que não é o caso, pois id é chave primária e não pode ser NULL.

Para ilustrar, considere que a tabela A tenha os id {1, 2, 3} e a tabela B tenha os id {2, 3, 4}. Um LEFT JOIN de A com B retornaria as linhas com os id de A (1, 2, 3), sendo que para o id 1 os campos de B seriam NULL. O id 4 de B não apareceria. Para obter os id de B que não existem em A (no caso, o 4), seria necessário fazer um LEFT JOIN de B com A (ou RIGHT JOIN de A com B) e filtrar as linhas onde o id de A é NULL.

A pegadinha da banca está em inverter a lógica da junção: ela afirma que o LEFT JOIN retorna os elementos da tabela da direita que não estão na esquerda, quando na verdade ele retorna todos os elementos da esquerda, com ou sem correspondência na direita. Essa é uma confusão clássica entre LEFT JOIN e RIGHT JOIN, e também entre a operação de junção e a operação de diferença da álgebra relacional.

Guarde a regra de ouro: a tabela que aparece à esquerda no LEFT JOIN é a que tem seus registros preservados. É exatamente essa inversão que a questão explora.

Item — ❌ ERRADO

A afirmação está errada. O LEFT JOIN entre A e B retorna todos os registros de A (a tabela à esquerda), e não os id de B que não existem em A. Para obter os id de B que não existem em A, a consulta correta seria:

SELECT B.id
FROM B
LEFT JOIN A ON B.id = A.id
WHERE A.id IS NULL;

Ou, de forma equivalente, usando NOT IN ou NOT EXISTS. A consulta descrita no enunciado, se fosse SELECT A.id FROM A LEFT JOIN B ON A.id = B.id, retornaria todos os id de A, com os campos de B nulos quando não houvesse correspondência. A banca inverteu a ordem das tabelas na junção, fazendo parecer que o LEFT JOIN retorna os elementos da tabela da direita que não estão na esquerda.

NÃO CAIA NESSA!

A banca troca a função do LEFT JOIN pela do RIGHT JOIN. No LEFT JOIN, a tabela à esquerda é a que tem todos os seus registros preservados. Para retornar os id de B que não existem em A, B deve estar à esquerda (ou usar RIGHT JOIN com A à esquerda) e filtrar os nulos de A.

Gabarito: letra E (ERRADO).

Link permanente: /questoes/gp018308