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.
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.