Hvis du tror, at implementeringen af LEFT JOIN er INNER JOIN + mere arbejde, så er dette resultat forvirrende. Hvad hvis implementeringen af INNER JOIN er (LEFT JOIN + filtrering)? Ah, det er klart nu.
I forespørgselsplanerne er den eneste forskel denne:brugere... ekstra:ved at bruge hvor . Det betyder filtrering. Der er et ekstra filtreringstrin i forespørgslen med den indre joinforbindelse.
Dette er en anden form for filtrering, end der typisk bruges i en where-klausul. Det er nemt at oprette et indeks på A for at understøtte denne filtreringshandling.
SELECT *
FROM A
WHERE A.ID = 3
Overvej denne forespørgsel:
SELECT *
FROM A
LEFT JOIN B
ON A.ID = B.ID
WHERE B.ID is not null
Denne forespørgsel svarer til indre joinforbindelse. Der er intet indeks på B, der vil hjælpe med denne filtreringshandling. Årsagen er, at where-klausulen angiver en betingelse for resultatet af joinforbindelsen i stedet for en betingelse for B.