Bruno Perroni
DBA SQL Server com mais de 6 anos de experiência!

Union Vs. Union All

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.