Considering the test case below.
CREATE TABLE t1(c0 BOOLEAN);
CREATE TABLE t0(c0 BOOLEAN, c1 BOOLEAN);
CREATE UNIQUE INDEX i0 ON t0(c1 , c0 );
INSERT INTO t0 (c0) VALUES (false);
INSERT INTO t1 (c0) VALUES (false);
SELECT * FROM t1, t0; -- false, false, null
SELECT NOT (false AND ((t1.c0 <= false) NOT IN (t0.c1))) FROM t1, t0; -- true
SELECT * FROM t1, t0 WHERE (NOT (false AND ((t1.c0 <= false) NOT IN (t0.c1))));
-- Expected: false, false, null
-- Actual: empty
The third SELECT returns an empty result, which is surprising: If the result of second query is true, the value of the NOT expression should be true, and thus the third query should return the row of the table after JOIN, that is false, false, null, same as the first query.
I found this in version LI-T6.0.0.170 where I built from source code 3dc03dd. Things work fine in v4.
Considering the test case below.
The third
SELECTreturns an empty result, which is surprising: If the result of second query istrue, the value of theNOTexpression should betrue, and thus the third query should return the row of the table after JOIN, that isfalse, false, null, same as the first query.I found this in version LI-T6.0.0.170 where I built from source code 3dc03dd. Things work fine in v4.