BUG #16511: Using '= all ( )' with empty table returns true

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

BUG #16511: Using '= all ( )' with empty table returns true

PG Doc comments form
The following bug has been logged on the website:

Bug reference:      16511
Logged by:          Anton Luhavy
Email address:      [hidden email]
PostgreSQL version: 10.7
Operating system:   MacOS
Description:        

Given table is "task" (id uuid primary key, status text not null),
Query "select 'b' = all (select status from task where status = 'a')"
returns true if table "task" is empty

Reply | Threaded
Open this post in threaded view
|

Re: BUG #16511: Using '= all ( )' with empty table returns true

Tom Lane-2
PG Bug reporting form <[hidden email]> writes:
> Given table is "task" (id uuid primary key, status text not null),
> Query "select 'b' = all (select status from task where status = 'a')"
> returns true if table "task" is empty

Why do you think that's wrong?  It matches usual mathematical practice,
and even if you dispute that, the SQL standard is quite explicit about it:

         1) Let R be the result of the <row value constructor> and let T be
            the result of the <table subquery>.
            ...
            a) If T is empty or if the implied <comparison predicate> is
              true for every row RT in T, then "R <comp op> <all> T" is
              true.

                        regards, tom lane