Verwenden von CROSS JOINs

CROSS JOINs, die keine WHERE-Klausel aufweisen, erzeugen das kartesische Produkt aus den an dem Join beteiligten Tabellen. So entspricht die Größe des Resultsets eines kartesisches Produkts der Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle. Im folgenden Beispiel wird ein Transact-SQL-CROSS JOIN dargestellt.

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

Das Resultset enthält 170 Zeilen (SalesPerson hat 17 und SalesTerritory hat 10 Zeilen; 17 multipliziert mit 10 ist gleich 170).

Wenn jedoch eine WHERE-Klausel hinzugefügt wird, verhält sich der CROSS JOIN wie ein innerer Join. So ergeben beispielsweise die folgenden Transact-SQL-Abfragen das gleiche Resultset.

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;