Como está interesado en el algoritmo, su pregunta parece reducirse a la diferencia entre IN
y EXISTS
como sus dos ejemplos son iguales excepto para el IN
cambiando a un EXISTS
en la eliminación del CHILD
mesa.
Se ha escrito mucho sobre esta diferencia a lo largo de los años, pero en esencia IN
se usa generalmente cuando el número de comparadores es pequeño mientras que EXISTS
es más eficiente para las subconsultas que devuelven una mayor cantidad de comparadores (especialmente si esos valores contienen una gran cantidad de duplicados).
IN
tiene que evaluar cada comparador devuelto mientras EXISTS
está satisfecho cuando encuentra la primera coincidencia.
Hay excepciones a esto y si las busca en Google, las encontrará, pero en general esto parece ser cierto.
Tom Kyte (VP de Oracle) tiene una muy buena respuesta con explicaciones aquí:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic también tiene una buena explicación aquí:http://www.techrepublic.com/article/oracle-tip-understand-the-difference- between-in-and-exists-in-subqueries/5297080
Espero que esto ayude...