Considere uma tabela chamada tabela1 com campo chamado c1 com o seguinte conteúdo:Considere as seguintes consultas SQL:I. select * from tabela1unionselect * from tabela1II. select * from tabela1union allselect * from tabela1III. select * from tabela1distinct unionselect * from tabela1Quais consultas acima geram o resultado abaixo?
AConsultas I e II.
BConsultas I e III.
CApenas a consulta I.
DApenas a consulta II.
EApenas a consulta III.
Revelar gabarito e comentário▾
GabaritoC — Apenas a consulta I.
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”.
Operadores de conjunto no SQL: UNION e UNION ALL
Gabarito: letra C — apenas a consulta I gera o resultado apresentado na imagem 2. A consulta I usa UNION, que elimina linhas duplicadas por padrão; a consulta II usa UNION ALL, que preserva todas as linhas, inclusive as duplicadas; e a consulta III é inválida, pois a sintaxe distinct union não existe no SQL padrão.
O UNION e o UNION ALL são operadores de conjunto que combinam os resultados de duas ou mais consultas. A diferença fundamental entre eles está no tratamento das linhas duplicadas: o UNION aplica uma eliminação implícita de duplicatas (como se usasse SELECT DISTINCT), enquanto o UNION ALL simplesmente concatena os resultados, mantendo todas as linhas, inclusive as repetidas. Essa distinção é crucial para entender o resultado de cada consulta.
Vamos analisar o cenário: a tabela tabela1 possui um campo c1 com um conjunto de valores (representado na imagem 1). A consulta I (select * from tabela1 union select * from tabela1) executa a primeira consulta, obtém os registros, executa a segunda consulta, obtém os mesmos registros, e então combina os dois resultados eliminando as duplicatas. O resultado final é exatamente o conjunto de valores distintos da tabela original, que corresponde à imagem 2.
A consulta II (select * from tabela1 union all select * from tabela1) também combina os resultados das duas consultas, mas sem eliminar duplicatas. Portanto, cada registro da tabela original aparecerá duas vezes no resultado final. Se a imagem 2 mostrasse o dobro de linhas, a consulta II estaria correta, mas como ela mostra apenas uma ocorrência de cada valor, a consulta II não gera esse resultado.
A consulta III (select * from tabela1 distinct union select * from tabela1) é sintaticamente inválida. A palavra-chave DISTINCT não é usada dessa forma com UNION. O DISTINCT é uma cláusula do SELECT (ex.: SELECT DISTINCT c1 FROM tabela1), e não um modificador do UNION. Portanto, essa consulta geraria um erro de sintaxe e não produziria nenhum resultado.
A pegadinha desta questão está em confundir o comportamento do UNION com o do UNION ALL. Muitos candidatos lembram que o UNION elimina duplicatas, mas esquecem que o UNION ALL não o faz, e acabam marcando a alternativa A (consultas I e II). Outros podem tentar encontrar um significado para a sintaxe distinct union, mas ela simplesmente não existe no SQL padrão.
Guarde a regra de ouro: UNION = elimina duplicatas; UNION ALL = mantém todas as linhas. É exatamente essa distinção que separa as alternativas desta questão.
Operadores de conjunto: UNION (Elimina duplicatas, Resultado: valores distintos); UNION ALL (Mantém todas as linhas, Resultado: com repetições); DISTINCT (Cláusula do SELECT, Não modifica UNION)
Alternativa A — ❌ Incorreta
Afirma que as consultas I e II geram o resultado da imagem 2. A consulta I gera, mas a consulta II não, pois o UNION ALL preserva as linhas duplicadas, resultando em um conjunto com o dobro de linhas da tabela original. O erro está em não considerar que o UNION ALL não elimina duplicatas.
Alternativa B — ❌ Incorreta
Afirma que as consultas I e III geram o resultado. A consulta I gera, mas a consulta III é inválida, pois a sintaxe distinct union não existe no SQL. O DISTINCT é uma cláusula do SELECT, não um modificador do UNION. Portanto, a consulta III não produziria nenhum resultado.
Alternativa C — ✅ Correta ⟵ GABARITO
Apenas a consulta I gera o resultado da imagem 2. O UNION combina os resultados das duas consultas e elimina as linhas duplicadas, resultando no conjunto de valores distintos da tabela original. A consulta II (UNION ALL) manteria as duplicatas, e a consulta III é sintaticamente inválida.
Alternativa D — ❌ Incorreta
Afirma que apenas a consulta II gera o resultado. A consulta II usa UNION ALL, que não elimina duplicatas, resultando em um conjunto com o dobro de linhas da tabela original. O resultado da imagem 2 mostra apenas uma ocorrência de cada valor, o que não corresponde ao comportamento do UNION ALL.
Alternativa E — ❌ Incorreta
Afirma que apenas a consulta III gera o resultado. A consulta III é sintaticamente inválida, pois a palavra-chave DISTINCT não é usada como modificador do UNION. A sintaxe correta seria SELECT DISTINCT * FROM tabela1 UNION SELECT * FROM tabela1, mas mesmo assim o UNION já eliminaria as duplicatas implicitamente. Portanto, a consulta III não produziria nenhum resultado.
NÃO CAIA NESSA!
A banca explora a diferença entre UNION e UNION ALL. O candidato que sabe que o UNION elimina duplicatas, mas esquece que o UNION ALL não o faz, marca a alternativa A. Lembre-se: UNION = conjunto sem repetições; UNION ALL = concatenação com repetições. E a sintaxe distinct union não existe — o DISTINCT pertence ao SELECT.
PEGA ESSA DICA!
Para questões de UNION vs UNION ALL, pergunte-se: "o resultado deve ter linhas repetidas?" Se sim, use UNION ALL; se não, use UNION. E desconfie de qualquer sintaxe que não siga o padrão SELECT ... UNION [ALL] SELECT ....