Estaba leyendo sobre SALVO y se cruzan en la biblioteca de MSDN y me encontré con este ejemplo de cómo utilizar INTERSECT:¿Por qué existe EXCEPT en T-SQL?
USE AdventureWorks2008R2 GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
Tal vez estoy pasado de moda, pero normalmente usaría el siguiente código para lograr el mismo resultado:
SELECT P.ProductID
FROM Production.Product P
INNER JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
¿Echo de falta algo, o soy INTERSECT lo mismo que INNER JOIN? ¿Hay algún beneficio en el rendimiento al usar uno sobre el otro?
La misma pregunta para EXCEPTO. ¿Cómo es esto:
USE AdventureWorks2008R2;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
diferente de esto:
SELECT P.ProductID
FROM Production.Product P
LEFT JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
WHERE W.ProductID IS NULL
?
-1: No es así como funciona INTERSECT. Su primer ejemplo no devuelve productos que tienen órdenes de trabajo; devuelve el ID de cualquier producto que tenga el mismo ID que el ID de una orden de trabajo para un producto. –