INTERSECT, EXCEPT y UNION son un set de operadores que ejecutan operaciones entre 2 o más set de datos. UNION ha estado disponible en T-SQL desde las primeras versiones, mientras INTERSECT y EXCEPT fueron introducidos en SQL 2005. Los tres operadores tienen requerimientos similares:
1. Requieren un mínimo de 2 set de datos.
2. Cada set de datos debe tener el mismo número de columnas.
3. Cada columna con su relativa columna deben ser tipos de datos compatibles.
4. La cláusula ORDER BY puede usarse únicamente al final de la consulta.
UNION
Combina los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión.
SELECT A, B, C FROM TABLA1
UNION
SELECT A, B, C FROM TABLA2
Una variante es UNION ALL que agrega todas las filas a los resultados. Incluye las filas duplicadas. Si no se especifica, las filas duplicadas se quitan.
SELECT A, B, C FROM TABLA1
UNION ALL
SELECT A, B, C FROM TABLA2
INTERSECT
Devuelve los valores distintos de la consulta inicial que corresponda con la siguiente consulta. Es decir los valores en común que tengan ambas consultas.
SELECT A, B, C FROM TABLA1
INTERSECT
SELECT A, B, C FROM TABLA2
EXCEPT
Devuelve los valores distintos de la consulta inicial que no se devuelven desde la consulta siguiente. Es decir en dependencia de la ubicación de la consulta nos regresara los valores que no se encuentren la siguiente.
SELECT * FROM t1
EXCEPT
SELECT * FROM t2
Sera distinto los resultados para la siguiente consulta:
SELECT * FROM t2
EXCEPT
SELECT * FROM t1
DIFERENCIA SIMETRICA
Como lograriamos esta consulta?
Pudiésemos usar NOT IN para ello
SELECT A
FROM Tabla1
WHERE A NOT IN(SELECT A FROM Tabla2)
UNION
SELECT A
FROM Tabla2
WHERE A NOT IN(SELECT A FROM Tabla1)
SELECT A FROM TABLA1
UNION
SELECT A FROM TABLA2
EXCEPT
SELECT A FROM TABLA1
INTERSECT
SELECT A FROM TABLA2