Not exists – sneller dan where (not) in

SELECT *
FROM table1 t1
WHERE NOT EXISTS (
SELECT *
FROM table2 t2
WHERE t2.id = t1.id
);

De “not exists” is een variatie op de “where (not) in” die sneller presteert. Deze query selecteert alle rijen uit table1 waarvoor geen overeenkomende rijen bestaan in table2 met dezelfde id-waarde.

De NOT EXISTS-clausule bevat een subquery die alle rijen in table2 selecteert waarvan de id-waarde gelijk is aan de id-waarde van de huidige rij in table1. Als de subquery ten minste één rij retourneert, dan zal de NOT EXISTS-clausule evalueren naar false en wordt de rij uitgesloten van de resultaten van de hoofdquery. Als er geen overeenkomende rijen worden gevonden in table2, dan zal de NOT EXISTS-clausule evalueren naar true en zal de rij worden opgenomen in de resultaten van de hoofdquery.

Merk op dat de subquery binnen de NOT EXISTS-clausule alleen de tabel table2 gebruikt en de kolom id om te controleren op overeenkomende waarden. Dit kan handig zijn in eenvoudige situaties waar er geen noodzaak is om verschillende tabellen samen te voegen met behulp van JOINs.