Wrong result with EXISTS and NULLs in maria-5.3 , maria-5.3-mwl89 regardless of @@optimizer_switch

Bug #729039 reported by Philip Stoev
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MariaDB
Fix Released
Critical
Igor Babaev

Bug Description

Repeatable in maria-5.3 and maria-5.3-mwl90 regardless of the switch. Not reproducible on maria-5.2 and mysql-5.5

The following query:

SELECT * FROM t1 WHERE EXISTS ( SELECT f1 FROM t2 WHERE t1.f1 = t2.f1 );

Returns rows even though the tables contain only NULL values and for no rows the equality t1.f1 = t2.f1 is TRUE. The problem goes away if the tables have 1 row or if IGNORE INDEX is used to prevent the index on f1 from being used.

explain:

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL f1 4 NULL 2 Using where; Using index
2 DEPENDENT SUBQUERY t2 ref f1 f1 4 test.t1.f1 2 Using index

test case:

CREATE TABLE t1 ( f1 varchar(1) , KEY (f1)) ;
INSERT IGNORE INTO t1 VALUES (NULL),(NULL);

CREATE TABLE t2 ( f1 varchar(1) , KEY (f1)) ;
INSERT IGNORE INTO t2 VALUES (NULL),(NULL);

SELECT *
FROM t1
WHERE EXISTS (
        SELECT f1
        FROM t2
        WHERE t1.f1 = t2.f1
);

Changed in maria:
milestone: none → 5.3
summary: - Wrong result with EXISTS and NULLs in maria-5.3 , maria-5.3-mwl89 with
- all switches
+ Wrong result with EXISTS and NULLs in maria-5.3 , maria-5.3-mwl89
+ regardless of @@optimizer_switch
Changed in maria:
importance: Undecided → Critical
status: New → Confirmed
assignee: nobody → Igor Babaev (igorb-seattle)
Changed in maria:
status: Confirmed → In Progress
Changed in maria:
status: In Progress → Fix Committed
Changed in maria:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.