Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
Banco de Dados›Consultas e Comandos em SQL
Código
qa537503
Banca
FUNDATEC
Órgão
CIGA SC
Ano
2023
Cargo
Prog ( )
Considere uma tabela chamada tabela1 com campo chamado c1 com o seguinte conteúdo:
c1
1
2
1
3
Considere as seguintes consultas SQL:
I. select * from tabela1
union
select * from tabela1
II. select * from tabela1
union all
select * from tabela1
III. select * from tabela1
distinct union
select * from tabela1
Quais consultas acima geram o resultado abaixo?
c1
1
2
3
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 UNION e UNION ALL no SQL
Gabarito: letra C. Apenas a consulta I gera o resultado esperado (1, 2, 3), pois o operador UNION combina os resultados de duas consultas eliminando linhas duplicadas, enquanto o UNION ALL mantém todas as linhas, inclusive as repetidas. A consulta III é inválida porque a sintaxe DISTINCT UNION não existe no SQL padrão.
O comando UNION é um operador de conjunto que combina os resultados de duas ou mais consultas SELECT, retornando apenas linhas distintas. Isso significa que, se a mesma linha aparecer em ambas as consultas, ela será exibida apenas uma vez no resultado final. Já o UNION ALL também combina os resultados, mas preserva todas as linhas, incluindo as duplicadas. Essa é a diferença fundamental entre os dois operadores.
Vamos analisar o caso concreto. A tabela tabela1 possui os valores 1, 2, 1 e 3 na coluna c1. A consulta I (UNION) une a tabela com ela mesma, eliminando as duplicatas: o valor 1 aparece duas vezes na tabela original, mas no resultado do UNION ele aparece apenas uma vez. O resultado final é 1, 2, 3 — exatamente o que o enunciado pede. A consulta II (UNION ALL) une a tabela com ela mesma sem eliminar duplicatas, resultando em 1, 2, 1, 3, 1, 2, 1, 3 — o que não corresponde ao resultado esperado. A consulta III é inválida porque a sintaxe DISTINCT UNION não é reconhecida pelo SQL padrão; o DISTINCT é uma cláusula do SELECT, não um modificador do UNION.
A pegadinha desta questão está em confundir UNION com UNION ALL. Muitos candidatos lembram que o UNION elimina duplicatas, mas esquecem que o UNION ALL não elimina. Além disso, a consulta III é uma armadilha clássica: a banca inventa uma sintaxe que parece plausível, mas que não existe no SQL. É importante memorizar que o UNION e o UNION ALL são os únicos operadores de união válidos, e que o DISTINCT não pode ser usado diretamente com eles.
Guarde a distinção central: UNION = elimina duplicatas; UNION ALL = mantém todas as linhas. É exatamente essa diferença que separa as alternativas desta questão.
Operadores de união: UNION (Combina resultados, Elimina duplicatas); UNION ALL (Combina resultados, Mantém todas as linhas); DISTINCT UNION (Sintaxe inválida)
Alternativa A — ❌ Incorreta
Afirma que as consultas I e II geram o resultado esperado. A consulta II (UNION ALL) não elimina duplicatas, portanto retornaria 1, 2, 1, 3, 1, 2, 1, 3 — não o resultado 1, 2, 3. O erro está em considerar que o UNION ALL também elimina duplicatas, o que é falso.
Alternativa B — ❌ Incorreta
Afirma que as consultas I e III geram o resultado esperado. A consulta III é inválida porque a sintaxe DISTINCT UNION não existe no SQL padrão. O DISTINCT é uma cláusula do SELECT, não um modificador do UNION. Portanto, a consulta III não geraria resultado algum — ela simplesmente falharia ao ser executada.
Alternativa C — ✅ Correta ⟵ GABARITO
Apenas a consulta I (UNION) gera o resultado esperado. O UNION combina os resultados das duas consultas e elimina linhas duplicadas. Como a tabela original tem os valores 1, 2, 1, 3, o UNION retorna apenas 1, 2, 3 — exatamente o resultado pedido no enunciado.
Alternativa D — ❌ Incorreta
Afirma que apenas a consulta II gera o resultado esperado. A consulta II (UNION ALL) não elimina duplicatas, portanto retornaria 1, 2, 1, 3, 1, 2, 1, 3 — não o resultado 1, 2, 3. O erro está em acreditar que o UNION ALL também elimina duplicatas.
Alternativa E — ❌ Incorreta
Afirma que apenas a consulta III gera o resultado esperado. A consulta III é inválida porque a sintaxe DISTINCT UNION não existe no SQL padrão. O DISTINCT é uma cláusula do SELECT, não um modificador do UNION. Portanto, a consulta III não geraria resultado algum — ela simplesmente falharia ao ser executada.
NÃO CAIA NESSA!
A banca explora a confusão entre UNION e UNION ALL. O candidato que sabe que o UNION elimina duplicatas pode achar que o UNION ALL também elimina, mas não é verdade. Além disso, a consulta III é uma armadilha: a sintaxe DISTINCT UNION não existe, mas parece plausível para quem não domina o assunto. Com treino, você reconhece essas armadilhas de longe 💪.
NÃO CAIA NESSA!
Para questões sobre UNION e UNION ALL, lembre-se: UNION = elimina duplicatas; UNION ALL = mantém todas as linhas. Se a questão pedir um resultado sem repetições, use UNION; se pedir todas as linhas, use UNION ALL. E desconfie de sintaxes inventadas como DISTINCT UNION — elas quase sempre são pegadinhas.