Pular para o conteúdo principal

Questão de Banco de Dados — Geral — FCC 2026

Banco de DadosGeral
Código
fc142491
Banca
FCC
Órgão
MPE AL
Ano
2026
Cargo
Ana ( )

Considere que um Ministério Público Estadual utiliza o PostgreSQL 16 e possui dois sistemas legados que geram listas intituladas numero_processo já normalizadas e sem sobreposição interna. Notou-se que a consolidação diária está consumindo CPU por etapa de remoção de duplicidade. Nesse caso, a decisão técnica que atende ao requisito de combinar resultados sem eliminação de duplicatas é a

  1. Asubstituição de UNION por UNION ALL, mantendo a compatibilidade de colunas entre os SELECT.
  2. Binclusão de ORDER BY em cada SELECT interno para reduzir o custo de deduplicação do UNION.
  3. Cmanutenção de UNION, adicionando DISTINCT no SELECT externo para reforçar a deduplicação.
  4. Dtroca por INTERSECT para retornar a composição dos conjuntos isento do custo de ordenação.
  5. Etroca por FULL OUTER JOIN usando COALESCE para concatenar os resultado com preservação das tuplas.
Revelar gabarito e comentário

GabaritoA — substituição de UNION por UNION ALL, mantendo a compatibilidade de colunas entre os SELECT.

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: UNION vs UNION ALL e eliminação de duplicatas

Gabarito: letra A. Para combinar resultados de duas consultas sem eliminar duplicatas, a decisão técnica correta é substituir UNION por UNION ALL, mantendo a compatibilidade de colunas entre os SELECT. O UNION realiza uma operação de deduplicação implícita (equivalente a um SELECT DISTINCT sobre o resultado combinado), enquanto o UNION ALL simplesmente concatena os resultados, preservando todas as linhas — exatamente o que o requisito pede.

O problema descrito é clássico em bancos de dados relacionais: quando se deseja unir resultados de duas consultas, o comando UNION é frequentemente usado por padrão, mas ele impõe um custo adicional de ordenação e remoção de duplicatas. No PostgreSQL, o UNION é implementado de forma que o otimizador precisa identificar e eliminar linhas repetidas entre os dois conjuntos, o que pode ser caro, especialmente em tabelas grandes. O UNION ALL, por outro lado, apenas concatena os resultados, sem qualquer verificação de duplicidade, tornando a operação mais rápida e eficiente.

A questão menciona que as listas numero_processo já estão normalizadas e sem sobreposição interna. Isso significa que, dentro de cada lista individual, não há duplicatas. No entanto, ao combinar as duas listas com UNION, o banco ainda precisa verificar se não há duplicatas entre as duas listas, mesmo que elas não tenham sobreposição. Essa verificação é desnecessária se o requisito é apenas combinar os resultados sem eliminar duplicatas — e é exatamente aí que o UNION ALL se destaca.

Na prática, considere duas consultas que retornam listas de números de processo:

  • Consulta A: retorna {1, 2, 3}

  • Consulta B: retorna {3, 4, 5}

Com UNION, o resultado seria {1, 2, 3, 4, 5} (o 3 aparece apenas uma vez). Com UNION ALL, o resultado seria {1, 2, 3, 3, 4, 5} (o 3 aparece duas vezes). Se o requisito é combinar sem eliminar duplicatas, o UNION ALL é a escolha correta, pois preserva todas as ocorrências.

A pegadinha da banca está em confundir o papel de cada operador: o UNION sempre elimina duplicatas, independentemente de haver ou não sobreposição entre as consultas. O UNION ALL é a única forma de combinar resultados sem essa eliminação. As demais alternativas tentam contornar o problema de outras formas, mas todas são incorretas ou ineficazes.

Guarde a distinção central: UNION = concatenação + deduplicação; UNION ALL = concatenação pura. É exatamente nessa fronteira que as alternativas se dividem.

UNIONUNION ALLdeduplicaçãoconcatenação puracombina resultadosLEVELsoulevel.com.br
Operadores de Conjuntos em SQL — só UNION: deduplicação; só UNION ALL: concatenação pura; UNION∩UNION ALL: combina resultados

Alternativa A — ✅ Correta ⟵ GABARITO

A substituição de UNION por UNION ALL é a decisão técnica que atende ao requisito de combinar resultados sem eliminação de duplicatas. O UNION ALL simplesmente concatena os resultados das duas consultas, preservando todas as linhas, sem qualquer custo de deduplicação. A compatibilidade de colunas entre os SELECT é um pré-requisito para ambos os operadores, mas não é o que define a eliminação de duplicatas — é apenas uma condição para que a união seja válida.

Alternativa B — ❌ Incorreta

A inclusão de ORDER BY em cada SELECT interno não reduz o custo de deduplicação do UNION. O ORDER BY é usado para ordenar os resultados, mas a deduplicação do UNION é uma operação separada que ocorre independentemente da ordenação. Na verdade, adicionar ORDER BY pode até aumentar o custo, pois exige uma etapa adicional de ordenação. O UNION já realiza a deduplicação implicitamente, e o ORDER BY não interfere nesse processo.

Alternativa C — ❌ Incorreta

Manter o UNION e adicionar DISTINCT no SELECT externo é redundante e não resolve o problema. O UNION já elimina duplicatas internamente, então adicionar DISTINCT no SELECT externo não muda nada — as duplicatas já foram removidas. Além disso, o requisito é não eliminar duplicatas, então essa alternativa vai na direção oposta, reforçando a deduplicação em vez de evitá-la.

Alternativa D — ❌ Incorreta

Trocar por INTERSECT é completamente equivocado. O INTERSECT retorna apenas as linhas que aparecem em ambas as consultas (a interseção dos conjuntos), não a composição dos conjuntos. O requisito é combinar os resultados, ou seja, unir as duas listas, não encontrar a interseção. Além disso, o INTERSECT também elimina duplicatas, o que contraria o requisito de preservá-las.

Alternativa E — ❌ Incorreta

Trocar por FULL OUTER JOIN usando COALESCE é uma abordagem incorreta e desnecessariamente complexa. O FULL OUTER JOIN é usado para combinar linhas de duas tabelas com base em uma condição de junção, preservando linhas sem correspondência. No entanto, para simplesmente concatenar duas listas de valores, o JOIN não é apropriado — ele exigiria uma condição de junção artificial e produziria um resultado diferente do esperado. O COALESCE é usado para lidar com valores nulos, não para concatenar resultados. A forma correta de combinar resultados de duas consultas é usar UNION ou UNION ALL, não um JOIN.

Gabarito: letra A

Link permanente: /questoes/fc142491