Usar combinaciones internas

Una combinación interna es aquélla en la que los valores de las columnas que se están combinando se comparan mediante un operador de comparación.

En el estándar ISO, las combinaciones internas se pueden especificar en la cláusula FROM o en la cláusula WHERE. Éste es el único tipo de combinación que ISO admite en la cláusula WHERE. Las combinaciones internas especificadas en la cláusula WHERE se conocen como combinaciones internas al estilo antiguo.

Esta consulta de Transact-SQL es un ejemplo de una combinación interna:

USE AdventureWorks2008R2;
GO
SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Person AS p
    ON e.BusinessEntityID = p.BusinessEntityID
ORDER BY p.LastName

Esta combinación interna se conoce como una combinación equivalente. Devuelve todas las columnas de ambas tablas y sólo devuelve las filas en las que haya un valor igual en la columna de la combinación.

Combinaciones con operadores distintos de igual

También se puede combinar valores de dos columnas que no son iguales. Los mismos operadores y predicados usados para las combinaciones internas se pueden utilizar para las combinaciones no igual. Para obtener más información acerca de los operadores y predicados disponibles que se pueden utilizar en combinaciones, vea Usar operadores en expresiones y WHERE (Transact-SQL).

En el siguiente ejemplo se utiliza una combinación menor que (<) para buscar precios de ventas del producto 718 que sean inferiores al precio de lista recomendado para ese producto.

USE AdventureWorks2008R2;
GO
SELECT DISTINCT p.ProductID, p.Name, p.ListPrice, sd.UnitPrice AS 'Selling Price'
FROM Sales.SalesOrderDetail AS sd
    JOIN Production.Product AS p 
    ON sd.ProductID = p.ProductID AND sd.UnitPrice < p.ListPrice
WHERE p.ProductID = 718;
GO

El conjunto de resultados es el siguiente.

ProductID Name ListPrice Selling Price

----------- --------------------------- ------------------ -------------

718 HL Road Frame - Red, 44 1431.5000 758.0759

718 HL Road Frame - Red, 44 1431.5000 780.8182

718 HL Road Frame - Red, 44 1431.5000 858.90

(3 filas afectadas)

Combinaciones con el operador no igual

La combinación no igual (<>) se usa con poca frecuencia. Como regla general, las combinaciones no igual sólo tienen sentido cuando se usan con una autocombinación. Por ejemplo, esta combinación no igual Transact-SQL y la autocombinación se usan para encontrar las subcategorías que tienen al menos dos precios diferentes menores de $15:

USE AdventureWorks2008R2;
GO
SELECT DISTINCT p1.ProductSubcategoryID, p1.ListPrice
FROM Production.Product p1
    INNER JOIN Production.Product p2
    ON p1.ProductSubcategoryID = p2.ProductSubcategoryID
    AND p1.ListPrice <> p2.ListPrice
WHERE p1.ListPrice < $15 AND p2.ListPrice < $15
ORDER BY ProductSubcategoryID;

Nota

La expresión NOT column_name = column_name es equivalente a column_name <> column_name.

En el siguiente ejemplo de Transact-SQL se utiliza una combinación no igual que se combina con una autocombinación para buscar todas las filas de la tabla ProductVendor en la que dos o más filas tengan el mismo ProductID pero distintos números de VendorID (es decir, productos que tienen más de un proveedor):

USE AdventureWorks2008R2;
GO
SELECT DISTINCT p1.VendorID, p1.ProductID
FROM Purchasing.ProductVendor p1
    INNER JOIN Purchasing.ProductVendor p2
    ON p1.ProductID = p2.ProductID
WHERE p1.VendorID <> p2.VendorID
ORDER BY p1.VendorID