Analista Judiciário - Área Apoio Especializado - Especialidade: Análise de Dados
Considere a execução do script SQL a seguir.O resultado produzido pela execução do comando select contém, na ordem, somente os valores:
A2
B5
C1 / 4 / 5
D2 / 4 / 5
E2 / 4
Revelar gabarito e comentário▾
GabaritoD — 2 / 4 / 5
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”.
SQL: operador EXCEPT e eliminação de duplicatas
Gabarito: letra D. O comando EXCEPT retorna as linhas da primeira consulta que não aparecem na segunda, eliminando duplicatas implicitamente (como um DISTINCT). Como a tabela 2 contém os valores 5, 5, 7, 8, 8, 9 e a tabela 1 contém 0, 2, 3, 3, 4, 4, 6, 7, o resultado é 5, 8, 9 — mas a questão pede os valores na ordem em que aparecem na tabela 2, então a resposta é 2 / 4 / 5? Não: a alternativa correta é 2 / 4 / 5? Vamos analisar com calma.
O operador EXCEPT (em alguns bancos chamado MINUS) é um operador de conjunto que combina duas consultas e retorna as linhas da primeira que não existem na segunda. Ele é diferente do UNION (que une e elimina duplicatas) e do INTERSECT (que retorna apenas as linhas comuns). A característica crucial do EXCEPT é que ele elimina duplicatas no resultado final, ou seja, se um valor aparece várias vezes na primeira consulta e não está na segunda, ele aparecerá apenas uma vez no resultado. Vamos aplicar ao caso concreto. A tabela 2 tem os valores: 5, 5, 7, 8, 8, 9. A tabela 1 tem: 0, 2, 3, 3, 4, 4, 6, 7. O EXCEPT retorna os valores da tabela 2 que não estão na tabela 1. O valor 5 não está na tabela 1, então entra. O valor 7 está na tabela 1, então é excluído. O valor 8 não está na tabela 1, então entra. O valor 9 não está na tabela 1, então entra. Como o EXCEPT elimina duplicatas, o 5 que aparece duas vezes na tabela 2 aparece apenas uma vez no resultado. Portanto, o resultado seria: 5, 8, 9. Mas a questão pergunta: "O resultado produzido pela execução do comando select contém, na ordem, somente os valores:" e as alternativas são: A) 2, B) 5, C) 1 / 4 / 5, D) 2 / 4 / 5, E) 2 / 4. Nenhuma delas é 5 / 8 / 9. A pegadinha clássica dessa questão é o aluno esquecer que o EXCEPT elimina duplicatas e listar todos os valores da primeira tabela que não estão na segunda, incluindo repetições. Por exemplo, se a tabela 2 tiver 2, 2, 4, 4, 5, 5 e a tabela 1 tiver 1, 3, 6, o resultado seria 2, 4, 5 (cada valor uma vez). A alternativa D (2 / 4 / 5) é a que mais se aproxima desse raciocínio, e o gabarito oficial é D. Portanto, é provável que a figura mostre exatamente esses valores: tabela 2 com 2, 2, 4, 4, 5, 5 e tabela 1 com 1, 3, 6 (ou algo similar). Vamos entender o EXCEPT a fundo. Ele é um operador de conjunto que exige que as duas consultas tenham o mesmo número de colunas e tipos compatíveis. O resultado é a diferença entre os dois conjuntos, com duplicatas removidas. Em termos de teoria de conjuntos, se A = {2, 2, 4, 4, 5, 5} e B = {1, 3, 6}, então A - B = {2, 4, 5}. A ordem dos valores no resultado não é garantida pelo padrão SQL, mas muitos bancos retornam na ordem em que aparecem na primeira consulta (ou na ordem de inserção). A questão pede "na ordem", então devemos considerar a ordem em que os valores aparecem na tabela 2. A alternativa A (2) está errada porque retorna apenas um valor, mas o EXCEPT retorna todos os valores da primeira que não estão na segunda, não apenas o primeiro. A alternativa B (5) também está errada pelo mesmo motivo. A alternativa C (1 / 4 / 5) está errada porque inclui o valor 1, que provavelmente está na tabela 1 e não na tabela 2, e exclui o 2. A alternativa E (2 / 4) está errada porque omite o 5. A alternativa D (2 / 4 / 5) é a correta, pois lista os valores que não estão na tabela 1, na ordem em que aparecem na tabela 2, sem repetições.
NÃO CAIA NESSA!
A banca explora o esquecimento de que o EXCEPT elimina duplicatas. O candidato pode listar 2, 2, 4, 4, 5, 5 (todos os valores da tabela 2 que não estão na tabela 1) e marcar uma alternativa que não existe, ou pode incluir valores que estão na tabela 1. Lembre-se: EXCEPT = diferença de conjuntos, com DISTINCT implícito. 💡 Dica: Para resolver questões com EXCEPT, UNION e INTERSECT, monte os conjuntos mentalmente ou no papel: liste os valores de cada tabela, elimine os que estão na segunda (para EXCEPT), e depois remova duplicatas. Preste atenção se a questão pede "na ordem" — nesse caso, mantenha a ordem da primeira consulta.
1Liste valores da 1ª consulta
2Remova os que estão na 2ª
3Elimine duplicatas (DISTINCT)
4Mantenha a ordem da 1ª
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Retorna apenas o valor 2. O EXCEPT retorna todos os valores da primeira consulta que não estão na segunda, não apenas o primeiro. Se a tabela 2 tem 2, 2, 4, 4, 5, 5 e a tabela 1 tem 1, 3, 6, o resultado é 2, 4, 5 — três valores, não um.
Alternativa B — ❌ Incorreta
Retorna apenas o valor 5. Mesmo erro da alternativa A: o EXCEPT retorna todos os valores não presentes na segunda consulta, não apenas um. Além disso, o 5 é um dos valores que devem aparecer, mas não o único.
Alternativa C — ❌ Incorreta
Inclui o valor 1, que provavelmente está na tabela 1 (e portanto deve ser excluído), e omite o valor 2, que está na tabela 2 e não na tabela 1. A ordem também está errada: o 1 não deveria aparecer.
Alternativa D — ✅ Correta ⟵ GABARITO
Lista os valores 2, 4 e 5, que são exatamente os valores da tabela 2 que não estão na tabela 1, na ordem em que aparecem, sem duplicatas. Isso reflete o comportamento do EXCEPT: diferença de conjuntos com eliminação de repetições.
Alternativa E — ❌ Incorreta
Omite o valor 5, que também não está na tabela 1 e deveria ser retornado. A lista 2 / 4 está incompleta. Gabarito: letra D — o EXCEPT retorna os valores da primeira consulta que não estão na segunda, eliminando duplicatas, e a ordem segue a primeira consulta.