Seção: Dicas Rápidas
Tem um erro que não quebra a query, mas muda o número final de um jeito perigoso: escolher UNION ou UNION ALL no automático.
Na prática, um deles pode esconder duplicidades que você deveria investigar. O outro pode inflar contagem, receita ou volume de eventos sem que ninguém perceba a tempo.
O erro em 20 segundos
UNION junta resultados e remove linhas duplicadas.
UNION ALL junta resultados e mantém todas as linhas.
Parece detalhe de sintaxe, mas a escolha muda completamente a leitura do dado:
SELECT id_pedido, valor
FROM vendas_site
UNION
SELECT id_pedido, valor
FROM vendas_app;
Se o mesmo pedido aparecer nas duas fontes com exatamente os mesmos valores, UNION deixa uma linha só.
Agora veja:
SELECT id_pedido, valor
FROM vendas_site
UNION ALL
SELECT id_pedido, valor
FROM vendas_app;
Aqui as duas linhas continuam. Isso pode estar certo ou errado. Depende da pergunta.
O que validar antes de confiar na saída
Antes de escolher, pare por 30 segundos e responda:
- As duas fontes podem conter o mesmo registro?
- Se contiverem, isso representa bug de duplicidade ou etapas diferentes do processo?
- A métrica final precisa deduplicar por chave de negócio ou preservar cada ocorrência?
Sem essa resposta, UNION e UNION ALL viram chute com cara de técnica.
Sinal verde
O sinal verde aparece quando você consegue explicar claramente por que a duplicidade deve ou não deve existir.
Exemplo:
- se a análise quer uma visão consolidada por pedido único, você provavelmente precisa preservar tudo com
UNION ALLe deduplicar depois com regra explícita; - se as queries produzem exatamente o mesmo grão e você só quer evitar repetição literal entre blocos equivalentes,
UNIONpode fazer sentido.
O ponto importante é este: a deduplicação precisa ser uma decisão visível, não um efeito colateral da sintaxe.
Erro comum
O erro mais comum é usar UNION para “limpar” uma base sem entender por que a duplicidade apareceu.
Isso é perigoso porque a query fica bonita e o total parece coerente, mas o problema estrutural continua escondido. No mês seguinte ele reaparece em outro painel, em outra tabela ou em outra reconciliação.
O erro oposto também dói: usar UNION ALL em duas fontes parcialmente sobrepostas e depois confiar na soma final como se cada linha fosse única.
É assim que nascem:
- pedidos contados duas vezes;
- leads duplicados em funil;
- eventos inflados em consolidação;
- dashboards em que cada aba mostra um número diferente para a mesma operação.
Ação rápida
Se houver qualquer dúvida, comece por UNION ALL e audite a duplicidade.
WITH base AS (
SELECT 'site' AS origem, id_pedido, valor
FROM vendas_site
UNION ALL
SELECT 'app' AS origem, id_pedido, valor
FROM vendas_app
)
SELECT
id_pedido,
COUNT(*) AS ocorrencias,
COUNT(DISTINCT origem) AS fontes
FROM base
GROUP BY id_pedido
HAVING COUNT(*) > 1;
Esse teste mostra rapidamente se o mesmo pedido aparece mais de uma vez e de onde ele está vindo.
Depois disso, você decide conscientemente:
- manter tudo, se cada ocorrência é válida;
- deduplicar por chave, se a regra de negócio pede um único pedido;
- investigar a origem, se a duplicidade não deveria existir.
Um checklist de 30 segundos
Antes de publicar a query, revise:
- O grão das duas consultas é realmente o mesmo?
- A duplicidade esperada está documentada ou só implícita?
- Você conferiu uma chave de negócio além da contagem total?
- Se usou
UNION, sabe exatamente o que foi removido? - Se usou
UNION ALL, já mediu o impacto na métrica final?
Leitura prática para analista
Senioridade em SQL não é só saber juntar blocos de consulta. É saber quando a própria sintaxe está tomando uma decisão de negócio por você.
UNION e UNION ALL parecem intercambiáveis até o dia em que uma reunião inteira gira em torno de um número inflado ou subcontado. Quando esse dia chega, o melhor antídoto é simples: preserve a rastreabilidade primeiro, deduplique depois com critério.
Resumo direto
UNION remove duplicidades. UNION ALL preserva todas as linhas.
O erro não está em escolher um ou outro. O erro está em escolher sem validar se a duplicidade representa bug, sobreposição legítima ou granularidade diferente entre fontes.
