Voltar para a lista de artigos Artigos
5 minutos de leitura

UNION vs. UNION ALL em SQL: Qual é a diferença?

UNION e UNION ALL são ambos utilizados para recuperar registros de várias tabelas. Este artigo detalhará as diferenças entre os dois, permitindo que você faça a melhor escolha para cada cenário único.

Você pode usar os comandos do SQL UNION e UNION ALL para obter dados de múltiplas tabelas em seu banco de dados. É um caso de uso comum, considerando que a maioria dos bancos de dados tem muitas tabelas. Ambos UNION e UNION ALL são conhecidos como operadores de conjunto. Em SQL, os operadores de conjunto combinam os resultados de duas ou mais consultas em um único resultado. Você pode ler mais sobre os operadores de conjuntos neste artigo.

Ao comparar UNION com UNION ALL, há uma grande diferença:

  • UNION só retorna único
  • UNION ALL devolve todos os registros, inclusive duplicatas.

Se você sente que se beneficiaria de um curso bem estruturado e abrangente que cobre SQL fundacional, considere este SQL para Iniciantes curso da LearnSQL.

UNION vs. UNION ALL: Sintaxe

A sintaxe de ambas as variantes UNION é muito semelhante. Vamos olhar para elas individualmente, começando com UNION.

Sintaxe da UNION

Lembre-se, UNION combina o conjunto de resultados de duas ou mais declarações SELECT, mostrando apenas valores distintos.

A sintaxe SQL abaixo mostra um UNION que ocorre entre duas tabelas diferentes; as colunas em ambas as instruções SELECT são dos mesmos tipos de dados ou são do mesmo tipo.

A cláusula WHERE mostrada é uma inclusão opcional:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

Sintaxe SQL UNION ALL

Lembre-se, UNION ALL combina os resultados de duas ou mais declarações SELECT, mostrando todos os valores, inclusive duplicatas, caso existam.

A sintaxe SQL abaixo mostra um UNION ALL que ocorre entre duas tabelas diferentes. Mais uma vez, as colunas no SELECT são do mesmo tipo de dados ou de tipos de dados correspondentes e a cláusula WHERE é opcional:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION ALL

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

SQL UNION e UNION ALL Explicadas

Há várias regras de uso para UNION e UNION ALL. A não adesão a essas regras resultará em mensagens de erro:

  • O número de colunas utilizadas em sua primeira consulta e sua segunda consulta deve ser o mesmo e os tipos de dados (por exemplo, INT, VARCHAR, etc.) devem corresponder.
  • Os nomes das colunas incluídas em ambas as consultas podem ser diferentes; quando este for o caso, o conjunto de dados resultante mostrará os nomes das colunas da primeira consulta.
  • Ao usar os apelidos SQL em conjunto com UNION e UNION ALL, você só precisa incluir o apelido com a primeira consulta. A inclusão com a segunda consulta não causará um erro, mas também não terá impacto sobre a saída.

Você pode usar UNION e UNION ALL para combinar tabelas que não têm nenhuma coluna em comum. Este caso de uso é abordado neste artigo sobre como unir tabelas sem uma coluna em comum.

SQL UNION vs. UNION ALL: Exemplo

Vejamos um exemplo prático para entender melhor UNION vs. UNION ALL. Imagine que temos um banco de dados com informações sobre vários clubes. Cada tabela mostrará os membros desse clube e qual o local que eles freqüentam. Cada clube pode ter vários ramos ou locais diferentes onde eles se reúnem. A primeira tabela é para o book_club. Ela contém o nome dos membros do clube e o que location eles atendem:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street

Da mesma forma, o rowing_club contém o nome dos membros do clube e o que location eles atendem.

namelocation
MaryFair Street
SamanthaFair Street
PaulWest Street

Agora que temos nossas tabelas, vamos escrever nossa consulta SQL. Usando a sintaxe UNION, obtemos a seguinte consulta:

SELECT name, location 
FROM book_club

UNION

SELECT name, location 
FROM rowing_club

UNION primeiro realiza uma operação de ordenação e elimina os registros que são duplicados em todas as colunas antes de finalmente retornar o conjunto de dados combinados. Você pode ver que usamos colunas do mesmo tipo de dados e SELECT o mesmo número de colunas em cada consulta. Isto segue as regras de uso do UNION e deve ser executado sem erro.

A execução desta consulta produz o seguinte resultado:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
SamanthaFair Street

Aí está! Todos os membros de ambos os clubes!

Agora vamos alterar a consulta e mudar UNION para UNION ALL:

SELECT name, location 
FROM book_club

UNION ALL

SELECT name, location 
FROM rowing_club

Com UNION ALL em vigor, podemos esperar que os resultados incluam duplicatas. Vamos executar esta nova consulta e observar o resultado:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
MaryFair Street
SamanthaFair Street
PaulWest Street

Você pode identificar todos os registros duplicados? Compare esta saída com nossas duas tabelas originais. Você pode ver que cada linha foi incluída.

UNION ou UNION ALL - Qual você deve escolher?

Agora que você sabe como usar tanto UNION quanto UNION ALL, você provavelmente está se perguntando qual é a melhor para sua situação. Uma coisa a considerar é o fato de que UNION remove registros duplicados, o que pode impactar o desempenho de sua consulta.

Se você estiver se perguntando qual variante usar, lembre-se:

  • Usando UNION efetivamente realiza um SELECT DISTINCT sobre o conjunto de resultados.
  • Se você sabe que todos os registros devolvidos por UNION serão únicos, use UNION ALL; será mais rápido. Isto é especialmente relevante para conjuntos de dados maiores.

Escreva Consultas Complexas com UNION e UNION ALL

Cobrimos as diferenças entre UNION e UNION ALL e porque você pode escolher uma ou outra. Com estas informações, você pode agora recuperar dados de duas ou mais tabelas em seu banco de dados. Tanto UNION quanto UNION ALL desempenham um papel importante no uso de consultas recursivas, um tópico mais avançado que é abordado em grande detalhe em nosso curso Consultas Recursivas .

Não se esqueça de marcar esta página para que você possa ter acesso fácil às explicações e exemplos de UNION vs. UNION ALL. Considere também salvar esta página de nosso livro de receitas SQL, que explica como combinar os resultados de duas consultas em SQL. Este conhecimento pode levar suas consultas SQL ao próximo nível, ajudando-o a lidar com casos complexos de uso com facilidade!