Bug #119401 rows become less after adding an or condition
Submitted: 15 Nov 2025 8:08 Modified: 8 Dec 2025 8:01
Reporter: cl hl Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S3 (Non-critical)
Version:9.4.0 OS:Any
Assigned to: CPU Architecture:Any

[15 Nov 2025 8:08] cl hl
Description:
after adding OR (TAN(vct76.col_1) = 29) ,the result unexpectedly become an empty set.

mysql> WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42)));
+-------+
| col_4 |
+-------+
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
+-------+
12 rows in set (0.00 sec)

mysql> WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42) OR (TAN(vct76.col_1) = 29)));
Empty set, 12 warnings (0.00 sec)

How to repeat:
DROP DATABASE IF EXISTS test;
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE t1 (
    c1 INT NOT NULL AUTO_INCREMENT,
    c2 VARCHAR(255) NOT NULL,
    c3 VARCHAR(255) NULL,
    c4 INT NULL,
    c5 DATE NOT NULL,
    c6 VARCHAR(10) NOT NULL,
    PRIMARY KEY (c1)
);

CREATE TABLE t3 (
    c1 INT NOT NULL AUTO_INCREMENT,
    c2 INT NOT NULL,
    c3 INT NOT NULL,
    c4 YEAR NOT NULL,
    c5 TIME NULL,
    c6 TINYINT NULL,
    c7 SMALLINT NULL,
    c8 MEDIUMINT NULL,
    c9 BIGINT NULL,
    c10 LONGTEXT NULL,
    c11 VARCHAR(255) NULL,
    c12 TINYTEXT NULL,
    c13 TINYBLOB NULL,
    c14 SET('x','y','z') NULL,
    c15 TINYINT(1) NULL,
    PRIMARY KEY (c1)
);

INSERT INTO t1 (c1, c2, c3, c4, c5, c6) VALUES (8711, 'sample_H0bxIKEbtSsSNoE4fQ02go0uWwMukodh2M0oTtTiefhg5SJf', 'sample_VCWYGsDcS9gn6qUA04DNxDeY2gvg41cRs30Zfb6T5o5USbnA4tNwyRbM5tWXmhTTzs9nfZGvC25Jwi8P8WKlHCFIxaU17VQP', 22, '2025-03-11', 'sample_ML');
INSERT INTO t1 (c1, c2, c3, c4, c5, c6) VALUES (9502, 'sample_gRZJisQ8CnqOPKTu10uL5iYyDxfjBuYlxeGEhdMpSqKcVtrL6sQhgrP2OkMaJlyFM7WyiE4ItMIPoNXiwYB0IqMn53P3BXgC05V8qF1488Pu5rL1KhNGHRWQbBOT69Bh6mG3l7XNZDxQWAr8BwihxWkhEtLuycJKTswb60G6lCYcPNQ1gLBax7s4MAW0IaVebCZWUK1OED8', 'sample_ZcnMv5EnefxK', 80, '2024-12-08', 'sample_O');
INSERT INTO t1 (c1, c2, c3, c4, c5, c6) VALUES (3423, 'sample_m8c5PmbiCPYM7BgM5Ef7HeBIHaTW0mU8xgjZXlvy0jcU9XnhTsfHajuW2cka6u99VmhUdzKxa2FhQDytaPeZpKtOQpFw4GlQn4fs0UfGH4aBzUNc0afdFjfcM1eZGOvWLQNuepm0nmBUfyOALf65lvE3XuSjgHNTk9mrKoa0jSXd6Ou6qt9u', 'sample_QpivJZaxO2b86puDimzQjRdO3qfJV0uDVoDgbRAQkHSvE1Smn2u6sGCwIjCSFl3nnLmjhI3B1evfQsUSsJcSz7RUjOFbMqDA8dyzwK9QS9kM0RTQ4ivh5A6AVtlntqI1uiqZrvbkjAejieEnZKsaL4mS7bvO1mQpMBiyyGfp6J8Lz0ibO3VpIop0Apg2', 41, '2025-04-01', 'sample_JY');

INSERT INTO t3 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) VALUES (8417, 9828, 4869, 2023, '2023-01-01 21:39:34', 14, 68, 41, 89, 'sample_etX2AhIU3JkLkyrEOwJTBqpBStqOrUPbskI8gL9NI0mwroTZBFHdHYljUuEHNlUbh5hyij8jKGC30KpbQ1LxgLF3m1cLuhezhgFbet0FnWTwJErW2Qd64AWovLqIOmfMKcJrXPMb405Gro9bXX0ewJlrXrzl383yHWXzgpu1Tb9SGfjW21HzuYBp50VLzsuEtkTKnFouWhIF6m4rT46enkICMZ8vOF9qUanlkKZ8aPFJSjPJX5O8pnDC1BiPX77tUJojj286KVV5Av6I9B9Itw8A0V2gZumzouD06KPaMkQlHsphSpBT7VpjPpneb3ebwLvj73Y15sCv5iwcbaDKFGTuZRdqtmCwx2l37zcGJgU6Ch8fbCNAgmFdYNJ0sveP7uiAvefZUWmlnFmQo6ASVSR5utAX2ha7bflNpNvwT6pbanbj49lcD00bY3DYwRWuMh2d8dVb1p9allRD9Tie2mJJO2wW5qmI3uHz9MzFBCRrkAwOhczPgT6gPtnleQXwtsdSU0zzeUjTYdu23ISbFdfCk9bgfRtIZkXa4faYbiRfy8jPkwjLNK9swCMcwxAtNe1LjK0DqRcGuVbTX5E2vpfDlfk60euiq1RO4TLEUuMaBpptJ7hAGQbTQrfD7rQr5s2QzKUNgM7jY3Pz0NtNRCDtousLLEzfvEmQkM4H95WGf4v24A564PdHfyY3xYflHU3pID5XyBUNi1XC2vga2Kq8ADaM5VKsE3o4BWIKpJcuESY0bOUcp1SOhSaqFiYjf3mmm9eUqo4elRwMqf37uOeNQ1TdvdvJlKRNHTi4umf6TYZr57zdtS4RuQ7HHW2NE5wQBBhmLcpoQyTquda7JCVSmmKo8G0h1C4VXe46bDTQvjJmrCw7JKMLncGbm7TEMsWMdiNxFPoXUDpxkXUSkjRAe0Uc9tPmeTUwq5uauperTQaR', 'sample_weZoLCxaYRuEbIZSAcw', 'sample_8eD325FzN79CIA1lx3hcxnIVFhKIlbppGhso8TzRvfqzVgovF4texBWt2e15D4TE8uXMELQHhSBEC2wHYIIOfKH8XCNMYbzkX06yuiY1u41mec1TesgBYKV3PW', X'D2A6D881052BECAA90E6BDA5DBAF542830D084', 'y,z', NULL);
INSERT INTO t3 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) VALUES (4582, 4362, 2120, 2003, '2023-01-01 10:35:52', 75, 23, 4, 15, 'sample_gPtaGnYsFMAlVwjqCJJU2QzwmdgOvBpGls5lvJFQyBnGEZz5NPkYK7scDSLaSiS0uRCXvLJgviwH0AlAvUmLhkaqnW3AEltUWHNIdnzTqBcHOsUDu0QeLyWliMU9G1LPvhB3X7ALnQc59TmIlaaa4zgbK8OiljOCbdK27haa6m0p5GSX5VOY0suuqipaSP3RX8Tu58dfASNpwe9hrhOIGVAoxmMySqppoJ2MNBUMG5rRTDFySlCqmXegIZSfV4pDHFb367Z4GCgUSrWBysl3pq2uoyW1d5rNvJ1knAew98VsBU7dh03J8aY0Moj4KnGi5expidhetPkwahDIEeqf4N5GoxWSxuJwVFpW2ijv0d6vgqGB21JRBw6RhtPqMP8qZq3zAr96npnFeMaiqehtxaWVpFY5Q9KT4xKsZhxz5NaLyodpM8PVejl5Et8SoV8RvknVMe5SjFrsSoXYqNgK15oTZwypMQkeRTflykZ5vZgX8nuBcQrIVohsdj1n4EmjKRSbPhewGn3IutqFRhBx4fpxQRAzCzp7Jf87TpSNxTHA3tu7HC6L4w7MuBmup4pTx8zm8HGcKX9DgQaJYzGHv2UaE1PM2eJ0x3fs6Y2oBJb1rsge59yR5wE72taYZGM6zFmF7nDntEKa7r57i5UZBKFNMgsmaHVvzvCWdNKzgS6q92Hlyxp9Gd529vHstvMxVwtd0ofNcUgA5hDcBlSUCDqGHYAemuS5mDvg8glOhyrgUdyetSDycRrlr61FVjKYgXW0Jp2s9XwssAsafhJTIP2wwgtQuLVZ4CbPlVneqOoVVU3mK5AGP4XOtQC7LQoorBtRx5HOAcTwGzLLpfiAKB1G45cCu1hUFv2t8YSUN20ooCAKrIbQKcz5bPGSvK17rpS5dYpHv76CJ0iQkEEJhAfyxWVOnwuMxanzt2f79DhC1C2Wo08OMJI70RkdU9uqjfrDmPmd2K9ZfXm1n4msB2m21Dl9e6VxAxCqgcAYADmEmkqnTgPZIV2qGWFa8Uad4YbLHcbvZQL8GsP6qXTmCDp2mB8l7C2fO5D4DWGMLQW6WcF1MBNebTqE4M1LRGxLO13aNuLb0uq9R0piXNz4tgwtPVPunfA01eKqShJFZBs8XlSb5Q025wUYPyF2tmXcFxJL9J4WTZxW6CwVycKgP8BGdXMAGcNf323dhwlYCr5enFrZ715sDEND0N79hjYrzBpU9H73T9qXmLkbfMzerqIFg9PKdWdUAGeDA3YuDEIlu7v7DZLMMcgYdclk0b1tbLLQix3FKk4On6yq5srcXheYdKkGLoKLFU883bNBafHG1U2ADpNtbzyw6UnqisFa9GR8NqDBoHjimj4Wddi4yacBYiZ33R3XW6zIUQC9gRexYiGYUIeFtmiQBZc0IpWJVZ8t49n7WXbTBy2JcDmBndn2yWYcfA4XrUuu5K5LGAmh4toVNEtBrglGcjhVIO5ptVhUfd7cMygMTK84GhNAUKMKzQ1AczxzYAGDyqV6Bbpm9676o58lGQClKdxYR5nKamhDGesLTj9No69pJwShExX2vfGIHPEXU0nN04u8dBDYYms21UIO2CpZcAUHc6hYmQRfFEynECKNgAlNHGMwhuqc6IAvbkvhE4TUxcRdXhSbg1U5q6yaWa2E1itUeH5H8E8PJlzH8yZmlAoaPluJzaMSQkKYU1tzA8bEaP70RLYcrCKvm5G7DE2sE9mCXBgXSrtgYzBgc9gT7IYvJ3Rn6uIIdD6KMyow0nO6QuB0CcWBDBgk3WKappl0CYsCDr5MHtk5f8BC7SXmJxOIZspgiD5yp9OOCbnt7KtWacjKQNNokC7DPE9WosuLUseg', 'sample_OMHD5WHEEeP825gAmH18ASwpqD0vYvORsqY1JeLMWv1WSXtxcKBge9eMlrt8UeUiKPtnRDLe7zuoeaiI0BBpG6bPMb4748Gm2MMEjEMRdiEm5VkF5QaLxVYgs6sG6EnjckihkivneYHGmNCgBVP9h0idYcjBp08sH7kN7o8xZS6XyAI2A8sln4cm', 'sample_jOWhHNwQUt1uJx2kPyP1w12xx0VmItQqrpMFoAK5Q5hzAwk6IdTs6Zs4O0fk3TBmFAOgiAO9uWZqt4c', X'4FEFAA9A7DEFA08134185EE2B8A908', 'y,x', NULL);

WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42)));
WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42) OR (TAN(vct76.col_1) = 29)));
[7 Dec 2025 20:36] Roy Lyseng
Sorry, but we cannot repeat this on neither 8.0, 8.4 nor 9.4.
[8 Dec 2025 7:56] cl hl
In version 9.0,I repeat it

mysql> WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42)));
+-------+
| col_4 |
+-------+
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
+-------+
12 rows in set (0.00 sec)

mysql> WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42) OR (TAN(vct76.col_1) = 29)));
Empty set, 12 warnings (0.00 sec)

mysql> EXPLAIN WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42) OR (TAN(vct76.col_1) = 29)));
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                          |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------+
|  1 | SIMPLE      | dlp17 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    3 |   100.00 | NULL                           |
|  1 | SIMPLE      | rin11 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | Using where                    |
|  1 | SIMPLE      | rin11 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | Using where; FirstMatch(rin11) |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------+
3 rows in set, 2 warnings (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 9.0.1     |
+-----------+
1 row in set (0.00 sec)
[8 Dec 2025 8:01] cl hl
In version 9.4.0,I repeat it
Please try again,thank you.
mysql> WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42)));
+-------+
| col_4 |
+-------+
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
|  -0.7 |
|    -1 |
+-------+
12 rows in set (0.00 sec)

mysql> WITH cte_972 AS (SELECT 1 AS col_1, dlp17.c6 AS col_2 FROM t1 AS dlp17), cte_606 AS (SELECT COS(rin11.c8) AS col_1 FROM t3 AS rin11) (SELECT ROUND(cyq40.col_1, 1) AS col_4 FROM cte_972 AS vct76 LEFT JOIN cte_606 AS cyq40 ON EXISTS(SELECT rel34.col_1 AS col_1 FROM cte_606 AS rel34 WHERE (vct76.col_2 = rel34.col_1) ORDER BY rel34.col_1 LIMIT 1) WHERE ((TAN(cyq40.col_1) <> 42) OR (TAN(vct76.col_1) = 29)));
Empty set, 12 warnings (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_JY' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_JY' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_JY' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_JY' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_ML' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_ML' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_ML' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_ML' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_O'  |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_O'  |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_O'  |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'sample_O'  |
+---------+------+-----------------------------------------------+
12 rows in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 9.4.0     |
+-----------+
1 row in set (0.00 sec)