Hi,
On Sun, 20 Sept 2026 at 18:13, PG Bug reporting form <
noreply@postgresql.org> wrote:
>
> The following bug has been logged on the website:
>
> Bug reference: 19709
> Logged by: N J
> Email address:
1482694023@qq.com> PostgreSQL version: 18.4
> Operating system: Windows 11 64-bit
> Description:
>
> Environment:
> PostgreSQL: 18.4
> OS: Windows 11 64-bit
>
> Reproduction query:
>
> CREATE TEMP TABLE IF NOT EXISTS a0 (x INTEGER);
> TRUNCATE TABLE a0;
> INSERT INTO a0 VALUES (42)
> RETURNING
> CASE
> WHEN (old).x IS DISTINCT FROM old.x THEN 1
> ELSE 0
> END AS bug;
>
> Observed result:
> bug
> -----
> 1
>
> Expected result:
> bug
> -----
> 0
>
> Explanation:
> For INSERT statements, the OLD tuple is all NULL.
> The expression old.x IS DISTINCT FROM old.x compares NULL with NULL.
> Per SQL standard, NULL IS DISTINCT FROM NULL returns false, so the CASE
> expression should return 0.
> PostgreSQL incorrectly evaluates this predicate to true and returns 1.
IIUC, this has already been fixed [1].
Please try the query on the latest minor versions.
Regards,
Ayush
[1]
https://git.postgresql.org/cgit/postgresql.git/commit/?h=REL_18_STABLE&id=9108fed3eda97475d5ef2f9060f6bc1f61783346