EXCEPT es otro de los operadores de conjuntos en SQL que permite trabajar con dos conjuntos de datos y regresa un tercer conjunto de datos que contenga los registros que si están en el primer conjunto de datos, pero no en el segundo.
Siguiendo con el ejemplo utilizado tanto en el UNION/UNION ALL como en el INTERSECT, utilizaremos las siguientes tablas.
De esta manera, el siguiente comando
SELECT * FROM a
EXCEPT
SELECT * FROM b;
contendrá todos los registros de A, excepto los que se encuentran duplicados en B.
En este caso, a diferencia del UNION/UNION ALL y de INTERSECT el orden de los conjuntos si altera el resultado, de tal manera que cambiando las tablas del query anterior de la siguiente manera
SELECT * FROM b
EXCEPT
SELECT * FROM a;
Se obtiene un resultado diferente, ya que el EXCEPT siempre tomará como base el primer conjunto de datos y «restará» los que se encuentran en el segundo.
Plan de ejecución
Para poder realizar o ejecutar el EXCEPT, el motor de bases de datos debe recorrer cada uno de los registros de una tabla y verificar si existe un registro exactamente igual en la segunda tabla para eliminarlo del resultado final. En el caso de SQL Server este plan de ejecución puede verificarse fácilmente y se obtiene lo siguiente.