De haakjes veranderen de semantiek niet. De positie van de ON
clausule bepaalt de volgorde van de logische verwerking van joins.
Eerste zoekopdracht
SELECT Customer.Name,
Product.Desc,
Transaction.Date
FROM Product
INNER JOIN Transaction
ON Transaction.ProductID = Product.ID
INNER JOIN Customer
ON Transaction.CustomerID = Customer.ID
Tweede zoekopdracht
(Overbodige haakjes verwijderd)
SELECT Customer.Name,
Product.Desc,
Transaction.Date
FROM Product
INNER JOIN Transaction
INNER JOIN Customer
ON Transaction.CustomerID = Customer.ID
ON Transaction.ProductID = Product.ID
Dus logisch in je eerste voorbeeld de join op Transaction, Product
gebeurt eerst, dan wordt de virtuele tafel die daaruit voortvloeit samengevoegd met Customer
, terwijl in uw tweede voorbeeld de join op Transaction, Customer
gebeurt eerst, dan wordt de virtuele tafel die daaruit voortvloeit samengevoegd met Product
Dit is alleen logisch en aangezien inner joins zowel associatief als commutatief zijn, zal dit waarschijnlijk geen verschil maken voor het uitvoeringsplan (tenzij u OPTION (FORCE ORDER)
toevoegt bij de query), maar het kan ook voor outer joins.
Dit wordt hier behandeld door Itzik Ben Gan maar het artikel bevat een aantal onjuistheden, zie de vervolgbrief van Lubor Kollar ook.