pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: BillR <iambill@williamrosmus.com>
To: Peter Eisentraut <peter_e@gmx.net>
Cc: pgsql-sql@postgresql.org, "D'Arcy J.M. Cain" <darcy@druid.net>
Cc: Andrew Sullivan <ajs@crankycanuck.ca>
Subject: Re: Differentiate Between Zero-Length String and NULLColumn Values
Date: Wed, 31 Jan 2007 12:18:03 -0800
Message-ID: <45C0F97B.4080104@williamrosmus.com> (raw)
In-Reply-To: <200701301959.37775.peter_e@gmx.net>
References: <20070130131334.GD31676@phlogiston.dyndns.org>
	<20070130142332.GA31905@phlogiston.dyndns.org>
	<20070130113834.fa8d09e0.darcy@druid.net>
	<200701301959.37775.peter_e@gmx.net>



Peter Eisentraut wrote:
> D'Arcy J.M. Cain wrote:
>   
>>    SELECT * FROM table WHERE column IS NULL;
>>    SELECT * FROM table WHERE column = NULL;
>>
>> The latter violates the SQL spec and is not allowed by PostgreSQL
>> without setting a special flag.
>>     
>
> It doesn't violate any spec and it's certainly allowed by PostgreSQL 
> without any flags.  It's just that the result is not what some people 
> expect.
>
>   

"= NULL" violates the SQL-92 Specification.  Relevant section posted below.
Additionally *none of the example code* in the SQL-92 specification 
document uses the expression "WHERE #value# = NULL"
*All* the example code in the specification use the expression as:  
"WHERE #value# IS NULL"


         8.6  <null predicate>

         Function

         Specify a test for a null value.

         Format

         <null predicate> ::= <row value constructor> IS [ NOT ] NULL


         Syntax Rules

            None.

         Access Rules


            None.

         General Rules

         1) Let R be the value of the <row value constructor>.

         2) If all the values in R are the null value, then "R IS NULL" is
            true; otherwise, it is false.

         3) If none of the values in R are the null value, then "R IS NOT
            NULL" is true; otherwise, it is false.

            Note: For all R, "R IS NOT NULL" has the same result as "NOT
            R IS NULL" if and only if R is of degree 1. Table 12, "<null
            predicate> semantics", specifies this behavior.

         ________________Table_12-<null_predicate>_semantics________________

                           R IS    R IS NOT      NOT R IS      NOT R IS NOT
         _Expression_______NULL____NULL__________NULL__________NULL_________

        | degree 1: null | true  | false       | false      |  true        |
        |                |       |             |            |              |
        | degree 1: not  | false | true        | true       |  false       |
          null

        | degree > 1:    | true  | false       | false      |  true        |
        | all null       |       |             |            |              |
        |                |       |             |            |              |
        | degree > 1:    | false | false       | true       |  true        |
        | some null      |       |             |            |              |
        |                |       |             |            |              |
        | degree > 1:    | false | true        | true       |  false       |
        |_none_null______|_______|_____________|____________|______________|
        |                |       |             |            |              |
        |Leveling Rules  |       |             |            |              |
        |                |       |             |            |              |
         218  Database Language SQL





view thread (15+ messages)  latest in thread

Message-ID: <45C0F97B.4080104@williamrosmus.com>
Permalink:  ../45C0F97B.4080104@williamrosmus.com/
Also on:    postgresql.org/message-id/45C0F97B.4080104@williamrosmus.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: iambill@williamrosmus.com, peter_e@gmx.net, darcy@druid.net, ajs@crankycanuck.ca
  Subject: Re: Differentiate Between Zero-Length String and NULLColumn Values
  In-Reply-To: <45C0F97B.4080104@williamrosmus.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox