Operações de conjuntos são operações entre dois ou mais conjuntos de entrada (SELECT), ou seja, uma seleção para juntar ou comparar esses conjuntos (tabelas ou campos).

A T-SQL dá suporte aos três conjuntos: UNION (união), INTERSECT (interseção) e EXCEPT (exceção), os dois últimos foram introduzidos a partir do SQL Server 2005.

Veja o modelo da operação de conjuntos como mostra a Listagem 1:

Listagem 1:Modelo de operação de conjuntos

SELEÇÃO1 (SELECT)

SELEÇÃO2 (SELECT)
[ORDER BY...] 

Operações de conjuntos UNION

Vamos pensar de acordo com a teoria dos conjuntos, aquele que estudamos na escola. Vamos imaginar os conjuntos A e B, o que a operação UNION faz? Vomo o próprio nome diz, a união desses dois conjuntos, no nosso caso, a união das informações entre duas tabelas. Na T-SQL há suporte a dois tipos de união: UNION ALL e UNION, este ultimo com DISTINCT implícito.

Vamos dar inicio a parte prática do nosso artigo, vou utilizar um banco chamado EXEMPLO_SCHEMA e fazer o seguinte SELECT (UNION ALL), como mostra a Listagem 2:

Listagem 2: Código utilizando o UNION ALL

SELECT COD, NOME  FROM CONTABILIDADE
UNION ALL
SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE 

Veja o resultado do UNION ALL, como mostra a Figura 1:

Resultado da utilização do UNION ALL

Figura 1: Resultado da utilização do UNION ALL

O UNION ALL retorna todas as linhas sem comparar e sem eliminar duplicatas, ou seja, simplesmente puxa todas as informações do select.

Agora vamos mostrar como exemplo o mesmo select sem o ALL, e vamos verificar o resultado. Primeiramente, vejamos o código a ser utilizado, como mostra a Listagem 3:

Listagem 3: Código utilizando o UNION.

SELECT COD, NOME  FROM CONTABILIDADE
UNION 
SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE 

Apenas o UNION (com o DISTINCT implícito). Neste caso as linhas duplicatas são eliminadas, conforme ilustra a Figura 2:

Resultado da utilização do UNION (DISTINCT implícito)

Figura 2: Resultado da utilização do UNION (DISTINCT implícito)

Operação de conjuntos INTERSECT

A operação INTERSECT funciona de forma um pouco parecida com a UNION, a diferença é que logicamente ela elimina primeiro as linhas duplicadas nos dois selects. Para ser mais claro vamos ao exemplo, como mostra a listagem 4:

Listagem 4: Código utilizando o INTERSECT

SELECT COD, NOME  FROM CONTABILIDADE
INTERSECT 
SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE

Para ficar mais claro, vamos mostrar o resultado, como mostra a Figura 3:

Resultado da utilização do INTERSECT

Figura 3: Resultado da utilização do INTERSECT

Operação de conjuntos EXCEPT

A operação de conjuntos EXCEPT, funciona como se fosse a diferença entre os conjuntos A e B (A - B), ou seja, os elementos que pertencem a A e não a B. Veja o exemplo, cujo código é mostrado na Listagem 5:

Listagem 5: Código utilizando o EXCEPT

SELECT COD, NOME  FROM CONTABILIDADE
EXCEPT 
SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE

Para se ter uma ideia, vamos ver o resultado desta operação de conjunto, ilustrado na Figura 4:

Resultado da utilização do EXCEPT

Figura 4: Resultado da utilização do EXCEPT

Para obter mais detalhes sobre operações de conjunto no SQL Server 2008, acessem o link: http://msdn.microsoft.com/pt-br/library/ms188055.aspx

Com isso finalizo este artigo que teve a real intenção de mostrar, sem muitos detalhes, as operações de conjuntos no SQL Server 2008. Espero que tenham gostado e até o próximo artigo.