Poiché sei interessato all'algoritmo, ciò a cui sembra ridursi la tua domanda è la differenza tra IN
e EXISTS
poiché i tuoi due esempi sono gli stessi, salvo per IN
passando a un EXISTS
nella cancellazione dal CHILD
tabella.
È stato scritto molto su questa differenza nel corso degli anni, ma in sostanza IN
è generalmente usato dove il numero di comparatori è piccolo mentre EXISTS
è più efficiente per le sottoquery che restituiscono un numero maggiore di comparatori (soprattutto se tali valori contengono un numero elevato di duplicati).
IN
deve valutare ogni comparatore restituito mentre EXISTS
è soddisfatto quando incontra la prima corrispondenza.
Ci sono delle eccezioni e se le cerchi su Google le troverai, ma nel complesso questo sembra essere vero.
Tom Kyte (Oracle VP) ha un'ottima risposta con spiegazioni qui:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic ha anche una buona spiegazione qui:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
Spero che questo aiuti...