Performance differences between IN and EXISTS

Very often I hear people wondering if it’s better the EXISTS or the IN operator. Let’s start by saying that the two operators behave differently when NULL values are involved (see this post). If you are sure that the field used to join the tables does not include NULL values then the IN operator “generally” performs better than EXISTS. I say “generally” because this is not always the case. For example consider the following query:

NOT IN vs. NOT EXISTS when NULL values are involved

NOT IN does not behave as you would expect when NULL values are involved. Suppose you have the following tables: CD_FIELD DS_FIELD 1 ALPHA 2 BETA **TABLE_A** CD_FIELD DS_FIELD 1 GAMMA NULL DELTA **TABLE_B** Now try the following query: SELECT * FROM table_a a WHERE a.cd_field NOT IN (SELECT b.cd_field FROM table_b b); Does the previous query return any row? The answer is NO it doesn’t, even if there is a value (2) in table_a.

Funny long jokes and aphorisms about programming (and programmers of course)

Here are some funny jokes and aphorisms about computer programmers and programming in general: A man is smoking a cigarette and blowing smoke rings into the air. His girlfriend becomes irritated with the smoke and says, “Can’t you see the warning on the cigarette pack? Smoking is hazardous to your health!“To which the man replies, “I am a programmer. We don’t worry about warnings; we only worry about errors.” A programmer is walking along a beach and finds a lamp.