I am not sure if MtSQL's fix is correct, but it is incomplete for sure. If the PK is changed to be only over 1 column, MySQL 5.6 produces the same incorrect result.
Example:
CREATE TABLE t1 (pk INT NOT NULL, i INT);
INSERT INTO t1 VALUES (0,10), (1,20), (2,30), (3,40);
CREATE TABLE t2b (pk INT NOT NULL, i INT NOT NULL, PRIMARY KEY
);
INSERT INTO t2b VALUES (0,0), (1,1), (2,2), (3,3);
EXPLAIN
SELECT * FROM t1 WHERE NULL NOT IN (SELECT t2b.i FROM t2b WHERE t2b.pk = t1.pk);
SELECT * FROM t1 WHERE NULL NOT IN (SELECT t2b.i FROM t2b WHERE t2b.pk = t1.pk);
SELECT t1.pk, NULL NOT IN (SELECT t2b.i FROM t2b WHERE t2b.pk = t1.pk) FROM t1;
I checked description of the MySQL bug, and tried to merge the patch, it does not work (maybe wrong merge).