Parentesen ändrar inte semantiken. Positionen för ON
klausul styr ordningen för logisk bearbetning av kopplingar.
Första frågan
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
Andra fråga
(Redundanta parenteser har tagits bort)
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å logiskt i ditt första exempel, gå med på Transaction, Product
händer först, sedan kopplas den virtuella tabellen som är resultatet av den till Customer
, medan det i ditt andra exempel går med på Transaction, Customer
händer först, sedan kopplas den virtuella tabellen som är resultatet av den till Product
Detta är bara logiskt och eftersom inre kopplingar är både associativa och kommutativa kommer detta sannolikt inte att göra någon skillnad för exekveringsplanen (såvida du inte lägger till OPTION (FORCE ORDER)
till frågan) men det kan göra för yttre kopplingar.
Detta bevakas av Itzik Ben Gan här men artikeln har ett antal felaktigheter, se uppföljningsbrevet av Lubor Kollar likaså.