Závorky nemění sémantiku. Pozice ON
klauzule řídí pořadí logického zpracování spojení.
První dotaz
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
Druhý dotaz
(Byly odstraněny nadbytečné závorky)
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
Tedy logicky ve vašem prvním příkladu spojení na Transaction, Product
nejprve se stane, pak se virtuální tabulka, která z toho vznikne, připojí k Customer
, zatímco ve vašem druhém příkladu spojení na Transaction, Customer
nejprve se stane, pak se virtuální tabulka, která je výsledkem toho, připojí k Product
To je pouze logické a protože vnitřní spojení jsou jak asociativní, tak komutativní, pravděpodobně to nebude mít žádný vliv na plán provádění (pokud nepřidáte OPTION (FORCE ORDER)
na dotaz), ale může to udělat pro vnější spojení.
Toto obsahuje Itzik Ben Gan zde ale článek obsahuje řadu nepřesností, viz navazující dopis Lubora Kollára také.