Коротше кажучи: EXISTS лише перевірить, чи підзапит має значення TRUE або FALSE, тоді як JOIN перевірить, чи дві таблиці мають таке взаємне значення, і поверне. У моєму випадку моя база даних має кілька дублікатів, через що запит JOIN завжди давав мені більше результатів, ніж запит EXISTS. 23 жовтня 2019 р.
Як ІСНУЄ, JOIN дозволяє використовувати один або більше стовпців для пошуку збігів. На відміну від EXISTS, JOIN не так заплутано реалізувати. Недоліком JOIN є те, що якщо підзапит має будь-які ідентичні рядки на основі предикату JOIN, то основний запит повторюватиме рядки, що може призвести до недійсних результатів запиту.
Якщо ви посилаєтеся на стовпець із батьківського запиту та маєте іншу таблицю, на яку посилається підзапит, часто це призводить до перехресного з’єднання та не надто продуктивно. Однак при використанні з EXISTS , насправді це може бути швидше, ніж якщо ви використовуєте IN або JOIN у певних ситуаціях.
Це одне з найпоширеніших запитань розробників, які пишуть запити SQL для фільтрації певних значень. Основна відмінність між ними полягає в тому IN вибирає список відповідних значень, тоді як EXISTS повертає логічне значення TRUE або FALSE.
EXISTS і NOT EXISTS обидва короткі замикання – щойно запис відповідає критеріям, він або включається, або відфільтровується, і оптимізатор переходить до наступного запису. LEFT JOIN об’єднає ВСІ ЗАПИСИ незалежно від того, збігаються вони чи ні, а потім відфільтрує всі невідповідні записи.
Речення EXISTS набагато швидше, ніж IN, коли результати підзапиту дуже великі. І навпаки, речення IN працює швидше, ніж EXISTS, коли результати підзапиту дуже малі. Крім того, пропозиція IN не може порівнювати нічого зі значеннями NULL, але пропозиція EXISTS може порівнювати все з значеннями NULL.