Comme vous êtes intéressé par l'algorithme, votre question semble se résumer à la différence entre IN
et EXISTS
comme vos deux exemples sont les mêmes sauf pour le IN
changer en un EXISTS
dans la suppression de l'CHILD
tableau.
Il y a eu beaucoup d'écrits sur cette différence au fil des ans, mais essentiellement IN
est généralement utilisé là où le nombre de comparateurs est petit alors que EXISTS
est plus efficace pour les sous-requêtes renvoyant un plus grand nombre de comparateurs (surtout si ces valeurs contiennent un grand nombre de doublons).
IN
doit évaluer chaque comparateur renvoyé alors que EXISTS
est satisfait lorsqu'il rencontre la première correspondance.
Il y a des exceptions à cela et si vous les recherchez sur Google, vous les trouverez, mais dans l'ensemble, cela semble être vrai.
Tom Kyte (Oracle VP) a une très bonne réponse avec des explications ici :http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic a également une bonne explication ici :http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
J'espère que cela vous aidera...