Pular para o conteúdo principal

UNION vs UNION ALL em SQL

Descubra as diferenças de resultado e desempenho entre UNION e UNION ALL: UNION tira as duplicatas, enquanto UNION ALL as inclui.
Atualizado 15 de jan. de 2026  · 8 min lido

No mundo do SQL, a capacidade de juntar dados de várias consultas é super importante, e o SQL tem funções poderosas como UNION e UNION ALL para fazer isso. 

Como você vai ver, entender as diferenças sutis entre as funções UNION e UNION ALL no SQL é essencial para uma consulta e gerenciamento eficientes de dados. Este tutorial explica as principais semelhanças, diferenças e cenários de uso usando conjuntos de dados complementares para te ajudar a otimizar suas consultas SQL.

A resposta curta: SQL UNION vs. UNION ALL 

A principal diferença é que UNION tira os registros duplicados, enquanto UNION ALL inclui todas as duplicatas. Essa diferença não só muda o número de linhas no resultado da consulta, mas também afeta o desempenho.

Recurso UNIÃO UNION ALL
Duplicatas Tira os registros duplicados Guarda todos os registros (incluindo duplicatas)
Desempenho Mais lento (precisa classificar/hashar os dados para encontrar duplicatas) Mais rápido (simplesmente adiciona os dados ao resultado)
Operação Teoria dos Conjuntos (União Matemática) Anexando/Empilhando Resultados

Vamos dar uma olhada em duas tabelas de exemplo, employees_2023 e employees_2024, que mostram os registros dos funcionários de dois anos diferentes.

SELECT *
FROM employees_2023

employee_id

nome

departamento

1

Alice

HR

2

Bob

IT

3

Charlie

Finanças

SELECT *
FROM employees_2024

employee_id

nome

departamento

2

Bob

IT

3

Charlie

Finanças

4

David

Marketing

Agora, vamos juntar nossas duas tabelas usando a função UNION.

SELECT employee_id, name, department FROM employees_2023 
UNION 
SELECT employee_id, name, department FROM employees_2024;

employee_id

nome

departamento

1

Alice

HR

2

Bob

IT

3

Charlie

Finanças

4

David

Marketing

Neste resultado, os registros duplicados são removidos. Agora, vamos comparar isso com o resultado que obtemos depois de usar UNION ALL.

SELECT employee_id, name, department FROM employees_2023 
UNION ALL 
SELECT employee_id, name, department FROM employees_2024;

employee_id

nome

departamento

1

Vivo

HR

2

Bob

IT

3

Charlie

Finanças

2

Bob

IT

3

Charlie

Finanças

4

David

Marketing

Neste resultado, todos os registros estão incluídos e as duplicatas não são removidas.

O que é UNION no SQL?

A função ` UNION ` junta os resultados de duas ou mais consultas ` SELECT ` num único conjunto de resultados, tirando as linhas que se repetem. Cada instrução ` SELECT ` dentro da instrução ` UNION ` precisa ter o mesmo número de colunas. Além disso, eles precisam ter tipos de dados parecidos e as colunas também precisam estar na mesma ordem. Pra entender como funciona, vamos criar duas tabelas de exemplo aqui embaixo.

CREATE TABLE sales_team (
    employee_id INT,
    employee_name VARCHAR(50)
);
INSERT INTO sales_team (employee_id, employee_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
CREATE TABLE support_team ( 
employee_id INT, 
employee_name VARCHAR(50)
 );
INSERT INTO support_team (employee_id, employee_name) VALUES 
(3, 'Charlie'), 
(4, 'David'), 
(5, 'Eve');

O código acima vai criar as duas tabelas que vamos usar neste tutorial, sales_team e support_team, respectivamente. Você pode ver as tabelas usando o código abaixo.

SELECT * 
FROM sales_team

Registros no <code624

Registros na tabela equipe_de_vendas. Imagem do autor 

SELECT * 
FROM support_team

Registros no <code624

Registros na tabela support_team. Imagem do autor 

São tabelas pequenas com três registros cada, e os nomes das colunas são bem claros. Agora que já criamos nossas duas tabelas, vamos usar a função UNION.

SELECT employee_id, employee_name
    FROM sales_team
   UNION
SELECT employee_id, employee_name
    FROM support_team;

Saída do <code624

Resultado da função UNION. Imagem do autor 

Você pode ver que a entrada duplicada de employee_id, que tem o valor de 3, foi removida. 

Quais são os casos de uso do UNION no SQL?

Aqui estão alguns casos de uso comuns para a função UNION.

  • Combinando resultados de diferentes tabelas: Quando você quer juntar dados de várias tabelas e garantir que não haja registros duplicados, a função UNION é a escolha certa.

  • Lidando com diferentes fontes de dados: O UNION é útil quando você quer juntar tabelas de diferentes fontes de dados. 

  • Removendo duplicatas entre consultas: Quando você quiser garantir a exclusividade do conjunto de resultados combinados, use UNION.

O que é UNION ALL no SQL?

A função ` UNION ALL ` junta os resultados de duas ou mais consultas ` SELECT `, incluindo todas as linhas duplicadas. Essa função é mais rápida do que UNION porque não se preocupa em remover duplicatas.

SELECT employee_id, employee_name
    FROM sales_team
UNION ALL
SELECT employee_id, employee_name
    FROM support_team;

Saída do <code624

Resultado da função UNION ALL. Imagem do autor 

Você pode ver que, nesse caso, as entradas duplicadas são repetidas e não removidas.

Quais são os casos de uso do UNION ALL no SQL?

Aqui estão alguns casos de uso comuns para a função UNION ALL.

  • Combinando resultados com duplicatas: Use UNION ALL quando precisar juntar os resultados de várias consultas e manter todas as linhas duplicadas.
  • Considerações sobre desempenho: UNION ALL é mais eficiente em termos de tempo do que a função UNION, porque não precisa daquela etapa extra de tirar as duplicatas.
  • Juntando dados de diferentes épocas: Quando você junta dados de diferentes épocas ou fontes e precisa manter as entradas duplicadas, é melhor usar o método de agregação “ UNION ALL ”.
  • Relatórios e análises: Para fins de relatório, onde todos os registros, incluindo duplicatas, são necessários, o UNION ALL é adequado.

UNION e UNION ALL: Semelhanças e diferenças

Vamos criar uma tabela resumida das semelhanças e diferenças. 

Recurso

UNIÃO

UNION ALL

Linhas duplicadas

Removido

Incluído

Desempenho

Mais lento

Mais rápido

Caso de uso

Quando você precisa de registros exclusivos

Quando você precisar de todos os registros

Tamanho do resultado

Menor

Maior

Diferenças de sintaxe entre UNION e UNION ALL em diferentes dialetos SQL 

Embora a sintaxe básica seja a mesma em diferentes dialetos SQL, há pequenas variações dependendo da plataforma. Se você der uma olhada no código, vai ver que na maioria das plataformas, tipo SQL Server, Oracle, MySQL, PostgreSQL ou BigQuery, ele vai ser parecido com o que tá mostrado abaixo. 

SELECT employee_id, employee_name
    FROM sales_team
UNION ALL
SELECT employee_id, employee_name
    FROM support_team;

Os comandos básicos nesses dialetos SQL continuam os mesmos, com algumas diferenças e nuances:

  1. Como lidar com NULLs e colações: Diferentes dialetos SQL podem ter regras diferentes para lidar com valores de NULL e classificação de strings.
  2. Otimizações de desempenho: As otimizações de desempenho e a eficiência de execução podem variar.
  3. Tratamento de erros e avisos: Diferentes dialetos podem lidar com erros e avisos de maneiras diferentes ao usar essas funções.
  4. Funções e recursos específicos da plataforma: Alguns dialetos SQL podem oferecer funções ou recursos adicionais que podem ser usados junto com UNION e UNION ALL para cenários mais complexos.

O comando é bem diferente no caso do PySpark, que funciona num ambiente distribuído. O código está abaixo, assumindo que df1 e df2 são os nomes dos dois data frames que consistem nas duas tabelas que criamos acima. :

df1.union(df2)

3 Regras e erros comuns ao usar SQL UNION

Embora UNION e UNION ALL sejam poderosos, eles são bem rígidos em relação à sintaxe. Se sua consulta está dando erro, é provável que esteja violando uma dessas três regras de ouro.

1. A incompatibilidade do número de colunas

O erro mais comum que os usuários encontram é uma incompatibilidade no número de colunas. Para juntar dois conjuntos de dados, o formato das tabelas precisa ser igual. Não dá pra empilhar uma tabela com 3 colunas em cima de uma tabela com 2 colunas.

O erro:

-- This will fail because the column counts do not match
SELECT employee_id, name, department 
FROM employees_2023
UNION
SELECT employee_id, name 
FROM employees_2024;

A solução: Certifique-se de que ambas as instruções ` SELECT ` solicitem exatamente o mesmo número de colunas. Se a segunda tabela estiver com dados faltando (como department), você pode escolher NULL como um espaço reservado para fazer as contagens baterem:

SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, NULL as department FROM employees_2024;

2. Compatibilidade de tipos de dados

O SQL junta os resultados com base na posição, não no nome da coluna. O tipo de dados da primeira coluna da sua primeira consulta precisa ser igual (ou compatível) com o tipo de dados da primeira coluna da sua segunda consulta.

O erro: Se você trocar acidentalmente a ordem das colunas, o SQL tentará empilhar um número (ID) em cima de uma string (nome), causando um erro de conversão de tipo de dados.

-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)
SELECT employee_id, name FROM employees_2023
UNION
SELECT name, employee_id FROM employees_2024;

A solução: Sempre dá uma olhada se suas colunas estão na mesma ordem em todas as instruções ` SELECT ` dentro do ` UNION`.

3. Limitações da ORDER BY

Um ponto que costuma causar confusão é onde colocar a cláusula ` ORDER BY `. Não dá pra ordenar as subconsultas individuais dentro de uma operação ` UNION `; só dá pra ordenar o resultado final combinado.

O erro: Usar ORDER BY antes da consulta final vai dar um erro de sintaxe.

-- INCORRECT SYNTAX
SELECT employee_id, name FROM employees_2023 
ORDER BY employee_id -- You cannot sort here!
UNION
SELECT employee_id, name FROM employees_2024;

A solução: Coloque a cláusula ` ORDER BY ` bem no final da sua consulta. Isso aplica a classificação a todo o conjunto de resultados combinados.

-- CORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
UNION
SELECT employee_id, name FROM employees_2024
ORDER BY employee_id; -- Sorts the final result

Considerações finais

É essencial entender a aplicação de UNION em oposição a UNION ALL no gerenciamento eficiente de dados usando SQL. Enquanto UNION seleciona só os registros diferentes, UNION ALL pega todos eles, afetando o desempenho e o tamanho do conjunto de resultados. Use esse conhecimento para escolher a função certa para suas necessidades específicas. 

Para saber mais, dá uma olhada nessas fontes:

  • Introdução ao SQL: Aprenda a criar e consultar bancos de dados relacionais usando SQL.
  • Fundamentos do SQL: Aprenda as habilidades básicas de SQL que você precisa para interagir e consultar seus dados. 
  • Certificação SQL Associate: Mostre suas habilidades em SQL extraindo os dados certos de um banco de dados e usando-os para responder a perguntas comuns sobre dados.
  • SQL intermediário: Com este curso prático, você aprenderá tudo o que precisa saber para analisar dados usando seu próprio código SQL hoje mesmo.

Vikash Singh's photo
Author
Vikash Singh
LinkedIn

Profissional experiente em funções de ciência de dados, inteligência artificial, análise e estratégia, com mais de 18 anos de experiência nas áreas de -: Ciência de dados, ML e IA ~ Ciência de dados, machine learning supervisionado e não supervisionado, aprendizagem profunda, modelagem preditiva, processamento de linguagem natural (NLP), modelagem e análise estatística, otimização, estratégia de negócios e análise ~ desenvolvimento e avaliação de modelos de negócios, análise descritiva e diagnóstica, EDA, visualização, análise de causa raiz, análise de sensibilidade e cenário.

Perguntas mais frequentes

Qual é a principal diferença entre SQL UNION e UNION ALL?

UNION remove registros duplicados, enquanto UNION ALL inclui todas as duplicatas.

Tem alguma diferença de desempenho entre UNION e UNION ALL?

Sim, o comando ` UNION ` geralmente é mais lento porque remove as duplicatas.

Tem casos específicos em que o UNION ALL é melhor do que o UNION?

UNION ALL é melhor quando você precisa de todos os registros, incluindo os duplicados, como em relatórios e análises.

Quando devo usar SQL UNION em vez de UNION ALL?

Use UNION quando precisar de um conjunto de resultados combinados sem duplicatas.

Como os diferentes dialetos SQL afetam o uso de UNION e UNION ALL?

Embora a sintaxe básica seja consistente, pode haver pequenas variações no desempenho, no tratamento de NULLs e na classificação entre os dialetos SQL.

Tópicos

Aprenda SQL com o DataCamp

Curso

Manipulação de dados em SQL

4 h
306.9K
Domine consultas SQL complexas no PostgreSQL para responder várias perguntas de ciência de dados e preparar conjuntos de dados robustos.
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

SQL Server, PostgreSQL, MySQL... qual é a diferença? Por onde devo começar?

Neste tutorial, você aprenderá algumas das diferenças básicas entre os dialetos SQL e por onde deve começar.
Mona Khalil's photo

Mona Khalil

5 min

Tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

Tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

Tutorial

Como usar GROUP BY e HAVING no SQL

Um guia intuitivo para você descobrir os dois comandos SQL mais populares para agregar linhas do seu conjunto de dados
Eugenia Anello's photo

Eugenia Anello

Tutorial

Como usar a função COALESCE() no SQL (com exemplos)

Saiba como usar a função SQL COALESCE() para lidar com valores nulos, combinar colunas e limpar seus dados com exemplos e dicas do mundo real.
Travis Tang 's photo

Travis Tang

Tutorial

Tutorial de visão geral do banco de dados SQL

Neste tutorial, você aprenderá sobre bancos de dados em SQL.
DataCamp Team's photo

DataCamp Team

Ver maisVer mais