Re: Select .... where id not in (....) returns 0 incorrectly

From: David Rowley <dgrowleyml(at)gmail(dot)com>
To: "J(dot) Roeleveld" <joost(at)antarean(dot)org>
Cc: PostgreSQL General <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Select .... where id not in (....) returns 0 incorrectly
Date: 2022-04-04 20:47:51
Message-ID: CAApHDvqh_LOKwKFaSUk83ELnftvYxobKaxOdTEruUmezuGM6PA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, 5 Apr 2022 at 01:21, J. Roeleveld <joost(at)antarean(dot)org> wrote:
> Personally, I think NULL should be treated as a seperate value and not lead to
> strange behaviour.

I think the rationale behind IN and NOT IN are that c IN(1,2,3) is
equivalent of writing: c = 1 OR c = 2 OR c = 3, whereas NOT IN(1,2,3)
would be the same as c <> 1 AND c <> 2 AND c <> 3. You can imagine
what would happen in the latter case if you replaced 3 with NULL. "c
<> NULL" is NULL therefore, due to the quals being ANDed, will cause
the WHERE clause not to match anything.

In any case, it's what the SQL standard says, so that's the way we do it.

David

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Lucas 2022-04-04 23:14:02 Load Balancer with PostgreSQL
Previous Message Sebastien Flaesch 2022-04-04 16:20:26 Re: Transaction and SQL errors