Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2023

Banco de DadosSQL
Código
qq890551
Banca
FUNDATEC
Órgão
CIGA-SC
Ano
2023
Nível
Médio
Cargo
Proramador
Considere uma tabela chamada tabela1 com campo chamado c1 com o seguinte conteúdo:Imagem associada para resolução da questãoConsidere 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?Imagem associada para resolução da questão
  1. AConsultas I e II.
  2. BConsultas I e III.
  3. CApenas a consulta I.
  4. DApenas a consulta II.
  5. 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.

1UNION
Elimina duplicatas
Resultado: valores distintos
2UNION ALL
Mantém todas as linhas
Resultado: com repetições
3DISTINCT
Cláusula do SELECT
Não modifica UNION
Operadores de conjunto
LEVELsoulevel.com.br
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 ....

Gabarito: letra C

Link permanente: /questoes/qq890551