Parenteserne ændrer ikke på semantikken. Placeringen af ON
klausul styrer rækkefølgen af den logiske behandling af joinforbindelser.
Første forespørgsel
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
Anden forespørgsel
(Overflødige parenteser fjernet)
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
Så logisk i dit første eksempel joinforbindelsen på Transaction, Product
sker først, derefter forbindes den virtuelle tabel, der er resultatet af det, til Customer
, hvorimod i dit andet eksempel joinforbindelsen på Transaction, Customer
sker først, derefter forbindes den virtuelle tabel, der er resultatet af den, til Product
Dette er kun logisk, og da indre joinforbindelser er både associative og kommutative, vil dette sandsynligvis ikke gøre nogen forskel for udførelsesplanen (medmindre du tilføjer OPTION (FORCE ORDER)
til forespørgslen), men det kan gøre for ydre joinforbindelser.
Dette er dækket af Itzik Ben Gan her men artiklen har en række unøjagtigheder, se opfølgningsbrevet af Lubor Kollar også.