Curso
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 na tabela sales_team. Imagem do autor
SELECT *
FROM support_team

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 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 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 ALLquando 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çãoUNION, 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:
- Manipulação de NULLs e agrupamentos: Dialetos SQL diferentes podem ter regras diferentes para lidar com valores
NULLe agrupamento de strings. - Otimizações de desempenho: As otimizações de desempenho e a eficiência de execução podem variar.
- Tratamento de erros e avisos: Dialetos diferentes podem tratar erros e avisos de forma diferente ao usar essas funções.
- 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
UNIONeUNION ALLpara 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.
