Incorrect result in certain expressions of anti-join - Mailing list pgsql-bugs

From Torbjörn Gannholm
Subject Incorrect result in certain expressions of anti-join
Date
Msg-id CAOW_tKjRWjghZ0+TKw7VkDV0Uh104VfjAowy37CKm67JuK5BBw@mail.gmail.com
Whole thread Raw
Responses Re: Incorrect result in certain expressions of anti-join
Re: Incorrect result in certain expressions of anti-join
List pgsql-bugs
To reproduce:

create table foo (a text);
Insert into foo values ('foo');
create table bar (a text);
insert into bar values ('foo'), ('bar');

Now the following expression of anti-join gives the correct result:
select * from bar LEFT JOIN foo ON foo.a = bar.a WHERE foo.a IS NULL;
  a  | a
-----+---
 bar |
(1 row)

However, a slight change and the anti-condition is simply ignored and the unexpected (IMO incorrect) result is returned. I would expect it either to work or to cause an error:
select * from bar LEFT JOIN foo ON foo.a = bar.a AND foo.a IS NULL;
  a  | a
-----+---
 foo |
 bar |
(2 rows)

/tobe

pgsql-bugs by date:

Previous
From: Philippe BEAUDOIN
Date:
Subject: Re: BUG #18767: Inconsistency in result of a Plpgsql GET DIAGNOSTICS PG_CONTEXT instruction.
Next
From: Thomas Munro
Date:
Subject: Re: BUG #18146: Rows reappearing in Tables after Auto-Vacuum Failure in PostgreSQL on Windows