Het verschil is dat wanneer je exists
- de query binnenin hangt meestal af van de hoofdquery (mean gebruikt kolommen ervan en kan dus niet afzonderlijk worden uitgevoerd) en dus wordt voor elke rij van de hoofdquery gecontroleerd of bepaalde gegevens die door de subquery worden opgehaald, al dan niet bestaan.
Het probleem van uw eerste query is dat de subquery in het bestaande blok niet afhangt van de hoofdquerykolommen, het is een afzonderlijke query die altijd een rij retourneert met 1
, dus voor elke rij van de hoofdquery bestaat het resultaat van exists
zal altijd true
zijn . Uw eerste zoekopdracht is dus gelijk aan
SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123
AND user.company_id IS NOT NULL
Zie ook viool