Utilizzo di cross join

Un cross join che non include una clausola WHERE consente di ottenere il prodotto cartesiano delle tabelle specificate nel join. Le dimensioni del set di risultati di un prodotto cartesiano corrispondono al numero di righe della prima tabella moltiplicato per il numero di righe della seconda. Nell'esempio seguente viene illustrato un cross join Transact-SQL.

USE AdventureWorks2008R2;
GO
SELECT p.BusinessEntityID, t.Name AS Territory
FROM Sales.SalesPerson p
CROSS JOIN Sales.SalesTerritory t
ORDER BY p.BusinessEntityID;

Il set di risultati include 170 righe, ovvero il prodotto delle 17 righe della tabella SalesPerson moltiplicato per le 10 righe della tabella SalesTerritory.

Se tuttavia si aggiunge una clausola WHERE, il cross join funziona esattamente come un inner join. Le query Transact-SQL seguenti consentono di ottenere lo stesso set di risultati.

USE AdventureWorks2008R2;
GO
SELECT p.BusinessEntityID, t.Name AS Territory
FROM Sales.SalesPerson p
CROSS JOIN Sales.SalesTerritory t
WHERE p.TerritoryID = t.TerritoryID
ORDER BY p.BusinessEntityID;

-- Or

USE AdventureWorks2008R2;
GO
SELECT p.BusinessEntityID, t.Name AS Territory
FROM Sales.SalesPerson p
INNER JOIN Sales.SalesTerritory t
ON p.TerritoryID = t.TerritoryID
ORDER BY p.BusinessEntityID;