Тъй като се интересувате от алгоритъма, въпросът ви изглежда се свежда до разликата между IN
и EXISTS
тъй като вашите два примера са едни и същи, освен за IN
промяна на EXISTS
в изтриването от CHILD
таблица.
През годините е писано доста за тази разлика, но по същество IN
обикновено се използва, когато броят на компараторите е малък, докато EXISTS
е по-ефективен за подзаявки, връщащи по-голям брой компаратори (особено ако тези стойности съдържат голям брой дубликати).
IN
трябва да оцени всеки върнат компаратор, докато EXISTS
е доволен, когато срещне първото съвпадение.
Има изключения от това и ако ги потърсите в Google, ще ги намерите, но като цяло това изглежда е вярно.
Tom Kyte (Oracle VP) има много добър отговор с обяснения тук:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic също има добро обяснение тук:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
Надявам се това да помогне...