Скобите не променят семантиката. Позицията на ON
клаузата контролира реда на логическата обработка на съединенията.
Първа заявка
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
Втора заявка
(Излишните скоби са премахнати)
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
Така че логично в първия ви пример присъединяването към Transaction, Product
се случва първо, след което виртуалната таблица, получена от това, се присъединява към Customer
, докато във втория ви пример присъединяването към Transaction, Customer
се случва първо, след което виртуалната таблица, получена от това, се присъединява към Product
Това е съвсем логично и тъй като вътрешните съединения са както асоциативни, така и комутативни, това вероятно няма да промени плана за изпълнение (освен ако не добавите OPTION (FORCE ORDER)
към заявката), но може да направи за външни съединения.
Това е покрито от Ицик Бен Ган тук но статията има редица неточности, вижте последващо писмо от Lubor Kollar както и.