--disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings --echo # If I do no subpartitioning the error disappears. --echo # InnoDB and NDB show the same bug. --echo # Extreme simplified testcase CREATE TABLE t1 (f_int1 INTEGER) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part1 VALUES IN (0), PARTITION part2 VALUES IN (1), PARTITION part4 VALUES IN (NULL)); INSERT INTO t1 SET f_int1 = NULL; --echo # There is the record with f_int1 IS NULL SELECT * FROM t1; --echo --echo # Where is the record with f_int1 IS NULL ?? SELECT * FROM t1 WHERE f_int1 IS NULL; DROP TABLE t1; --echo --echo # The original testcase # Hint for ML: Error in partition_basic_myisam # check null-1 success: 0 SET @max_row = 20; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(10), f_char2 CHAR(10), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; --echo # There is the record with f_int1 IS NULL SELECT * FROM t1; --echo --echo # Where is the record with f_int1 IS NULL ?? SELECT * FROM t1 WHERE f_int1 IS NULL; # Cleanup DROP TABLE t1;