public inbox for [email protected]
help / color / mirror / Atom feedFrom: Adrian Klaver <[email protected]>
To: Luca Dametto <[email protected]>
To: [email protected]
Subject: Re: Documentation enancement regarding NULL and operators
Date: Wed, 18 Dec 2024 08:11:35 -0800
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
On 12/15/24 09:35, Luca Dametto wrote:
> Hi All,
> I'm coming from hours of debugging a SQL trigger that wasn't working
> properly. After a beautiful headache and infinite hours of documentation
> reading I've found out that something doesn't work as I would expect.
>
> Most programming languages return "true" when two null values are
> compared, and false when, being the two values nullable, one of them is
> null and the other one isn't.
> Any developer coming from Python, Javascript, PHP (and many more) would
> expected 'example'= null to return false, whilst SQL thanks to 3VL
> returns you a gentle ¯\_(ツ)_/¯ . Not a true, not a false, just nothing
> - in a boolean statement.
>
> Python3:
> >>> "example" == None
> False
> >>> None == None
> True
>
> NodeJS:
> > "example" == null
> false
> > null == null
> true
>
> PHP 8:
> > var_dump("example" == null);
> bool(false)
> > var_dump(null == null);
> bool(true)
>
> Whilst I'd love to discuss the reasons of this, I understand that it
> would be a waste of time for everyone, as we cannot change the
> status-quo even if it made sense, as it would break many thousands of
> projects.
>
> For that reason, I'd just like to improve the documentation to add at
> least a note about "hey, this won't work as you might expect, because it
> works in a different way than 99% of programming languages out there.".
> I've tried to understand how to submit my proposal for the documentation
> improvements, but it's way harder than what my brain can handle with the
> current headache caused by this stuff, I've attached a git patch to this
> email in case it's useful.
>
> Content: "
> PostgreSQL follows SQL's 3VL, due to that some comparisons regarding
> NULL values may not work as you might expect.
> As an example, two nullable columns that contain NULL, when compared
> using the OPERATOR =, will return nothing instead of TRUE like your
> programming language may do. In this case, only 'IS NOT DISTINCT FROM'
> would return the result you expect.
> "
See:
https://www.postgresql.org/docs/current/functions-comparison.html
" Ordinary comparison operators yield null (signifying “unknown”), not
true or false, when either input is null. For example, 7 = NULL yields
null, as does 7 <> NULL. When this behavior is not suitable, use the IS
[ NOT ] DISTINCT FROM predicates:"
>
> Kind regards,
> Luca
--
Adrian Klaver
[email protected]
view thread (2+ messages)
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: [email protected]
Cc: [email protected], [email protected]
Subject: Re: Documentation enancement regarding NULL and operators
In-Reply-To: <[email protected]>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox