EXISTS versus IN

Previous Next

Use (NOT) EXISTS instead of (NOT) IN whenever you can.

Background

Analyze cases where you only want a Yes/No answer (do records meet a particular condition or not?).

If you can use it, (NOT) EXISTS is always faster than (NOT) IN, because searching stops as soon as a record is (not) found.

(NOT) IN causes records to be fetched and stored temporarily before the main query can be evaluated.

Example:

Consider the business rule: "A reservation must have a participant with an insurance". Rewrite an SQL statement like the following:

SELECT    '' violation

FROM      reservation r

WHERE     r.res_id NOT IN

(

          SELECT    pt.res_id

          FROM      participant pt

          WHERE     pt.res_id = r.res_id

          AND       pt.insurance = 'Y'

)

 

to:

SELECT    '' violation

FROM      reservation r

WHERE NOT EXISTS

(

          SELECT    ' '

          FROM      participant pt

          WHERE     pt.res_id = r.res_id

          AND       pt.insurance = 'Y'

)