Da du er interesseret i algoritmen, er det, dit spørgsmål ser ud til at bunde i, forskellen mellem IN
og EXISTS
da dine to eksempler er de samme, undtagen for IN
ændres til en EXISTS
i sletningen fra CHILD
tabel.
Der har været skrevet meget om denne forskel gennem årene, men i det væsentlige IN
bruges generelt, hvor antallet af komparatorer er lille, mens EXISTS
er mere effektiv til underforespørgsler, der returnerer et større antal komparatorer (især hvis disse værdier indeholder et stort antal dubletter).
IN
skal evaluere hver returnerede komparator, mens EXISTS
er tilfreds, når den støder på den første kamp.
Der er undtagelser fra dette, og hvis du googler efter dem, vil du finde dem, men i det hele taget ser det ud til at holde stik.
Tom Kyte (Oracle VP) har et meget godt svar med forklaringer her:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic har også en god forklaring her:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
Håber dette hjælper...