Eae Pessoal, tudo bom com vocês ?
No post de hoje vou falar um pouco sobre o UNION e o UNION ALL, muita gente ainda se confunde na hora de usar um ou o outro.
Bom vamos lá, a principal diferença entre eles é que um elimina duplicidade e o outro não.
Abaixo temos um script para efetuarmos os testes, com duas tabelas simples com 4 registros cada uma, porém o nome José da Silva é o único que se repete nas duas tabelas.
Vamos ver qual é o comportamento do select usando o UNION e o UNION ALL.
create table #desenvolvedores ( id int, nome varchar(50), idade int, sexo char(1) ) insert into #desenvolvedores values (1, 'José da Silva', 44, 'M') insert into #desenvolvedores values (2, 'Pedro Roberto', 27, 'M') insert into #desenvolvedores values (3, 'Silvia Santos', 35, 'F') insert into #desenvolvedores values (4, 'Valdo Nunes', 48, 'S') create table #analistas ( id int, nome varchar(50), idade int, sexo char(1) ) insert into #analistas values (1, 'José da Silva', 44, 'M') insert into #analistas values (2, 'Julia Sanches', 23, 'F') insert into #analistas values (3, 'Jair Rodrigues', 55, 'M') insert into #analistas values (3, 'Fatima Marques', 20, 'M')
O primeiro select usando o UNION, não repetiu a linha com o nome do José da Silva
Já o segundo select com o UNION ALL, não quis nem saber e trouxe todos os dados, repetindo o nome do José da Silva.
Algumas considerações sobre o UNION e o UNION ALL:
Podemos notar que o primeiro select possui a coluna sexo e o segundo select não possui.
Ambos os selects devem ter a mesma quantidade de colunas, caso contrario dará um erro conforme abaixo:
Outro ponto importante, se você já está usando UNION não há necessidade de se utilizar o DISTINCT no select, pois não ira alterar a quantidade de registros retornados na consulta.