Como você está interessado no algoritmo, sua pergunta parece se resumir à diferença entre
IN
e EXISTS
como seus dois exemplos são os mesmos, salve o IN
mudando para um EXISTS
na exclusão do CHILD
tabela. Muito tem sido escrito sobre essa diferença ao longo dos anos, mas em essência
IN
é geralmente usado onde o número de comparadores é pequeno enquanto EXISTS
é mais eficiente para subconsultas que retornam um número maior de comparadores (especialmente se esses valores contiverem um grande número de duplicatas). IN
tem que avaliar cada comparador retornado enquanto EXISTS
fica satisfeito quando encontra a primeira correspondência. Existem exceções para isso e se você pesquisar no Google, você as encontrará, mas no geral isso parece ser verdade.
Tom Kyte (VP da Oracle) tem uma resposta muito boa com explicações aqui:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic também tem uma boa explicação aqui:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
Espero que isto ajude...