Ако смятате, че изпълнението на LEFT JOIN е INNER JOIN + повече работа, тогава този резултат е объркващ. Ами ако изпълнението на INNER JOIN е (LEFT JOIN + филтриране)? А, вече е ясно.
В плановете за заявка единствената разлика е следната:потребители... допълнително:използвайки where . Това означава филтриране. Има допълнителна стъпка за филтриране в заявката с вътрешното присъединяване.
Това е различен вид филтриране, отколкото обикновено се използва в клауза where. Лесно е да създадете индекс на A, за да поддържате това филтриране.
SELECT *
FROM A
WHERE A.ID = 3
Помислете за тази заявка:
SELECT *
FROM A
LEFT JOIN B
ON A.ID = B.ID
WHERE B.ID is not null
Тази заявка е еквивалентна на вътрешно присъединяване. Няма индекс на B, който да помогне за това филтриране. Причината е, че клаузата where посочва условие за резултата от присъединяването, вместо условие за B.