Bug #119790 Unexpected result of expression IN NULL
Submitted: 27 Jan 10:14 Modified: 27 Jan 12:07
Reporter: chi zhang Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S1 (Critical)
Version:8.0.44 OS:Any
Assigned to: CPU Architecture:Any

[27 Jan 10:14] chi zhang
Description:
Hi,

In the following test case, there are two equivalent queries. However, the normal SELECT returns 1 row, but the prepared SELECT returns an empty result. As the IN NULL expression should return NULL, I think the normal SELECT might unexpectedly return the wrong result.

```
CREATE TABLE IF NOT EXISTS t1(c0 SMALLINT PRIMARY KEY);
REPLACE INTO t1(c0) VALUES(1);
SELECT ALL c0 FROM t1 WHERE (((t1.c0) IN (NULL)) || ((t1.c0) IN (CAST(0.6807376207553701 AS DOUBLE)))); -- 1
SET @a = 0.6807376207553701;
PREPARE prepare_query FROM 'SELECT ALL c0 FROM t1 WHERE (((t1.c0) IN (NULL)) || ((t1.c0) IN (CAST(? AS DOUBLE))))';
EXECUTE prepare_query USING @a; -- empty result
```

How to repeat:
```
CREATE TABLE IF NOT EXISTS t1(c0 SMALLINT PRIMARY KEY);
REPLACE INTO t1(c0) VALUES(1);
SELECT ALL c0 FROM t1 WHERE (((t1.c0) IN (NULL)) || ((t1.c0) IN (CAST(0.6807376207553701 AS DOUBLE)))); -- 1
SET @a = 0.6807376207553701;
PREPARE prepare_query FROM 'SELECT ALL c0 FROM t1 WHERE (((t1.c0) IN (NULL)) || ((t1.c0) IN (CAST(? AS DOUBLE))))';
EXECUTE prepare_query USING @a; -- empty result
```
[27 Jan 12:07] Roy Lyseng
Thank you for the bug report.
Verified as described.