Обсуждение: Bug #765: 'IS NULL' versus '= NULL'
Bhuvan A (bhuvansql@myrealbox.com) reports a bug with a severity of 3
The lower the number the more severe it is.
Short Description
'IS NULL' versus '= NULL'
Long Description
I am using postgresql 7.2.1. I suppose NULL keyword refers nullity (null values) in general.
'IS NULL' and '= NULL' behaves differently in where conditions in SELECT sql, but behaves as expected in UPDATE sql.
Considerthis case.
> select count(*) from my_table where id is NULL;
count
-------
0
(1 row)
> select count(*) from my_table where id = NULL;
count
-------
0
(1 row)
> select count(*) from my_table where id in (NULL);
count
-------
0
(1 row)
> update my_table set id = NULL where id = 12;
UPDATE 1
> select count(*) from my_table where id is NULL;
count
-------
1
(1 row)
> select count(*) from my_table where id = NULL;
count
-------
0
(1 row)
> select count(*) from my_table where id in (NULL);
count
-------
0
(1 row)
Eventhough my_table contain a record with id as null, the last 2 sqls are not resulting that record. Why? Maybe my
understandingwould be wrong on this behaviour, if so please kindly apologize and give some description on this
difference,since i dont have answer in the documentation.
TIA.
regards,
bhuvaneswaran
Sample Code
No file was uploaded with this report
> Eventhough my_table contain a record with id as null, the last 2 sqls > are not resulting that record. Why? Because they're not the right commands to do that kind of thing. Please read the chapter on operators and functions in the User's Guide. -- Peter Eisentraut peter_e@gmx.net
On Sat, Sep 14, 2002 at 04:43:15AM -0400, pgsql-bugs@postgresql.org wrote: > Eventhough my_table contain a record with id as null, the last 2 sqls > are not resulting that record. Why? Maybe my understanding would be > wrong on this behaviour, if so please kindly apologize and give some > description on this difference, since i dont have answer in the > documentation. afaik: according to sql documentation (and implementations different that postgresql), any comparison where one of values is null should yield "null" as response. is means, that NULL =3D NULL gives you "null" instead of "true", and if you want this kind of checks you have to use "is null" operator. postgresql used to process "NULL =3D NULL" as true, but it was changed to conform with standard and typical implementations in ohter databases. best regards depesz --=20 hubert depesz lubaczewski http://www.depesz.pl/ ------------------------------------------------------------------------ M=F3j Bo=BFe, spraw abym milcza=B3, dop=F3ki si=EA nie upewni=EA, =BFe na= prawd=EA mam co=B6 do powiedzenia. (c) 1998 depesz