Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
- Código
- qa537600
- Banca
- FUNDATEC
- Órgão
- COMUSA
- Ano
- 2023
- Cargo
- Tec ( )
- AUNION ALL
- BGROUP BY
- CANY
- DFULL JOIN
- EDISTINCT
GabaritoA — UNION ALL
Gabarito: letra A. O operador UNION ALL combina o conjunto de resultados de duas ou mais instruções SELECT permitindo valores duplicados, pois não executa a eliminação de linhas repetidas que o UNION padrão realiza (equivalente a um SELECT DISTINCT). A distinção central está no tratamento das duplicatas: UNION elimina, UNION ALL preserva.
Os operadores de conjunto em SQL — UNION, UNION ALL, INTERSECT e EXCEPT — permitem combinar os resultados de duas ou mais consultas em um único conjunto de resultados. Eles são fundamentais para manipular dados provenientes de diferentes fontes ou condições em uma mesma consulta. A regra essencial para utilizá-los é que as consultas envolvidas devem ter o mesmo número de colunas, na mesma ordem e com tipos de dados compatíveis — não é necessário que os nomes das colunas sejam idênticos, apenas que a estrutura seja compatível.
O operador UNION combina os resultados e, por padrão, executa um SELECT DISTINCT no resultado final, eliminando as linhas duplicadas. Isso significa que, mesmo que não haja registros duplicados, o processo de verificação e eliminação é executado. Já o UNION ALL tem a mesma funcionalidade de combinar resultados, porém não executa a eliminação de duplicatas, apresentando todas as linhas, inclusive as repetidas. Essa é a diferença crucial que a questão explora.
Para ilustrar, considere duas consultas que retornam as cidades 'Berlin' e 'México D.F.' cada uma. Com UNION, o resultado teria apenas uma ocorrência de cada cidade; com UNION ALL, o resultado teria duas ocorrências de cada, pois as duplicatas são preservadas. Essa distinção é essencial quando se deseja manter todas as ocorrências, como em relatórios que precisam contabilizar cada registro individualmente.
A pegadinha da banca está em confundir UNION com UNION ALL, ou em associar a eliminação de duplicatas ao UNION ALL. O candidato que memoriza apenas que "UNION junta resultados" pode marcar a alternativa errada, sem perceber que o UNION padrão elimina duplicatas. A palavra-chave no enunciado é "permitindo valores duplicados", que aponta diretamente para o UNION ALL.
Guarde a fronteira: UNION = DISTINCT implícito (elimina duplicatas); UNION ALL = mantém todas as linhas (permite duplicatas). É exatamente nessa distinção que as alternativas se dividem.
O UNION ALL é o operador que combina os resultados de duas ou mais instruções SELECT permitindo valores duplicados. Conforme a definição, ele tem a mesma funcionalidade do UNION, porém não executa o SELECT DISTINCT no resultado e apresenta todas as linhas, inclusive as linhas duplicadas. É exatamente o que o enunciado pede.
O GROUP BY é uma cláusula utilizada para agrupar linhas que possuem os mesmos valores em colunas específicas, geralmente em conjunto com funções de agregação (COUNT, SUM, AVG, etc.). Ele não combina resultados de consultas distintas e não tem relação com a permissão de duplicatas — na verdade, o agrupamento tende a consolidar linhas, não a preservá-las.
O operador ANY é utilizado em subconsultas para comparar um valor com qualquer um dos valores retornados pela subconsulta (ex.: WHERE preco > ANY (SELECT preco FROM ...)). Ele não combina conjuntos de resultados de consultas independentes e não tem relação com duplicatas.
O FULL JOIN (ou FULL OUTER JOIN) é um tipo de junção entre tabelas que retorna todos os registros de ambas as tabelas, preenchendo com NULL os campos sem correspondência. Ele combina colunas de tabelas diferentes com base em uma condição de junção, não combina resultados de consultas independentes como os operadores de conjunto. Além disso, não há relação com a permissão de duplicatas.
O DISTINCT é uma cláusula que elimina valores duplicados do resultado de uma consulta, retornando apenas valores distintos. Ele faz exatamente o oposto do que o enunciado pede — em vez de permitir duplicatas, ele as remove. É o comportamento implícito do UNION, não do UNION ALL.
Gabarito: letra A
Link permanente: /questoes/qa537600