Pular para o conteúdo principal

UNION vs. UNION ALL no SQL

Descubra as diferenças de saída e desempenho entre UNION e UNION ALL: O UNION remove as duplicatas, enquanto o UNION ALL as inclui.
Actualizado 29 de jul. de 2024  · 7 min de leitura

No universo do SQL, a capacidade de combinar dados de várias consultas é um requisito fundamental, e o SQL oferece funções poderosas como UNION e UNION ALL para que você possa fazer isso. 

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

A resposta curta: SQL UNION vs. UNIÃO TODOS 

A principal diferença é que o UNION remove os registros duplicados, enquanto o UNION ALL inclui todos os duplicados. Essa distinção não apenas altera o número de linhas no resultado da consulta, mas também afeta o desempenho.

Vamos considerar duas tabelas de amostra, employees_2023 e employees_2024, que representam registros de 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 unir 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

Vivo

HR

2

Bob

IT

3

Charlie

Finanças

4

David

Marketing

Nesse resultado, os registros duplicados são removidos. Agora vamos comparar isso com o resultado obtido após 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

Bob

3

Charlie

Finanças

4

David

Marketing

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

O que é UNION no SQL?

A função UNION combina os resultados de duas ou mais consultas SELECT em um único conjunto de resultados, removendo as linhas duplicadas. Cada instrução SELECT no site UNION deve ter o mesmo número de colunas. Além disso, eles devem ter tipos de dados semelhantes e as colunas também devem estar na mesma ordem. Para que você entenda a função, vamos criar duas tabelas de exemplo abaixo.

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 criará as duas tabelas que usaremos neste tutorial, sales_team e support_team, respectivamente. Você pode visualizar as tabelas usando o código abaixo.

SELECT * 
FROM sales_team

Registros no <code624

Registros na tabela sales_team. Imagem do autor 

SELECT * 
FROM support_team

Registros no <code624

Registros na tabela support_team. Imagem do autor 

Essas tabelas são pequenas, com três registros cada, e os nomes das colunas são autoexplicativos. Agora que temos nossas duas tabelas criadas, vamos aplicar 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

Saída da função UNION. Imagem do autor 

Você pode ver que a entrada duplicada de employee_id, que assume 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 tabelas diferentes: Quando você quiser combinar dados de várias tabelas e garantir que não haja registros duplicados, UNION é a função ideal.

  • Manuseio de diferentes fontes de dados: UNION é útil quando você combina tabelas de diferentes fontes de dados. 

  • Remoção de 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 combina 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

Saída 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.

  • Combinação de resultados com duplicatas: Use UNION ALL quando você precisar combinar resultados de várias consultas e preservar todas as linhas duplicadas.
  • Considerações sobre o desempenho: UNION ALL é mais eficiente em termos de tempo do que a função UNION, pois não exige a etapa adicional de remoção de duplicatas.
  • Agregação de dados de diferentes períodos: Ao agregar dados de diferentes períodos ou fontes e você precisar preservar as entradas duplicadas, é preferível usar o site UNION ALL.
  • Relatórios e análises: Para fins de relatório em que todos os registros, inclusive os duplicados, são necessários, o site UNION ALL é adequado.

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

Vamos criar uma tabela de resumo das semelhanças e diferenças. 

Recurso

UNIÃO

UNIÃO TODOS

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 de UNION e UNION ALL nos dialetos SQL 

Embora a sintaxe básica permaneça a mesma em diferentes dialetos SQL, há pequenas variações dependendo da plataforma. Se você observar o código na maioria das plataformas, como SQL Server, Oracle, MySQL, PostgreSQL ou BigQuery, o código será parecido com o que é 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 permanecem os mesmos, com algumas nuances e diferenças:

  1. Manipulação de NULLs e agrupamentos: Dialetos SQL diferentes podem ter regras diferentes para lidar com valores NULL e agrupamento 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: Dialetos diferentes podem tratar erros e avisos de forma diferente 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 em conjunto com UNION e UNION ALL para cenários mais complexos.

O comando é significativamente diferente no caso do PySpark, que opera em um ambiente distribuído. O código é dado abaixo, supondo que df1 e df2 sejam os nomes dos dois quadros de dados que consistem nas duas tabelas que criamos acima. :

df1.union(df2)

Considerações finais

É essencial que você entenda a aplicação de UNION em vez de UNION ALL no gerenciamento eficiente de dados usando SQL. Enquanto UNION seleciona apenas registros distintos, UNION ALL seleciona todos eles, afetando o desempenho e o tamanho do conjunto de resultados. Use esse conhecimento para escolher a função apropriada para suas necessidades específicas. 

Para aprender mais, considere explorar as seguintes fontes:

  • Introdução ao SQL: Aprenda a criar e consultar bancos de dados relacionais usando SQL.
  • Fundamentos de SQL: Adquira as habilidades fundamentais de SQL que você precisa para interagir e consultar seus dados. 
  • Certificação SQL Associate: Demonstre sua habilidade em SQL extraindo dados apropriados 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.

Perguntas frequentes

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

UNION remove registros duplicados, enquanto UNION ALL inclui todos os duplicados.

Há alguma diferença de desempenho entre UNION e UNION ALL?

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

Há casos de uso específicos em que o UNION ALL é preferível ao UNION?

UNION ALL é preferível quando você precisa de todos os registros, inclusive duplicatas, como em relatórios e análises.

Quando devo usar o SQL UNION em vez do UNION ALL?

Use UNION quando você 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 no agrupamento entre dialetos SQL.

Temas

Aprenda SQL com a DataCamp

curso

Introduction to SQL

2 hr
974.1K
Learn how to create and query relational databases using SQL in just two hours.
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

9 min

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

3 min

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

6 min

tutorial

Função SQL COALESCE

COALESCE() é uma das funções mais úteis do SQL. Leia este tutorial para saber como dominá-lo.
Travis Tang 's photo

Travis Tang

4 min

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

3 min

See MoreSee More