Este post será sobre uma pergunta que sempre me fazem. Qual a diferença entre UNION e UNION ALL?

Para começarmos vamos só relembrar 2 regas básicas para o uso do UNION/UNION ALL -Todas consultas devem ter o mesmo número de campos -O tipo de dado do Campo1 da Consulta1 deve ser igual ao tipo de dado do Campo1 da Consulta2 e assim por diante.

De forma breve, a diferença é que o UNION ALL apenas une os resultados de cada select. Enquanto o UNION não exibe valores repetidos, ou seja, ele faz um distinct antes, tornando a consulta mais onerosa. Vamos à prática:

DECLARE @Clientes2010 table (Nome varchar(50)) DECLARE @Clientes2011 table (Nome varchar(50))

INSERT INTO @Clientes2010 values ('Empresa X'),('Empresa Y'),('Empresa Z'), ('Empresa Alfa') INSERT INTO @Clientes2011 values ('Empresa A'),('Empresa B'),('Empresa Z'), ('Empresa Alfa')

SELECT Nome FROM @Clientes2010 UNION SELECT Nome FROM @Clientes2011 SELECT Nome FROM @Clientes2010 UNION all SELECT Nome FROM @Clientes2011



Plano de execução: 


Análise:



Veja que o comando UNION foi quase 3 x mais oneroso comparado ao UNION ALL

DICA:
Se você está fazendo uma união de selects e você tem certeza que são valores diferentes(Pessoa Física/Pessoa Jurídica) , use sempre o UNION ALL, pois não fará diferença o Distinct e a performance será melhor.