Description:
Hi, MySQL developers,
Please see the below cases.
```
CREATE TABLE t1(c0 FLOAT);
CREATE TABLE t0(c0 INT);
INSERT INTO t1(c0) VALUES(0.2);
INSERT INTO t0(c0) VALUES(1);
CREATE INDEX i0 ON t1((((CAST(IFNULL(t1.c0, t1.c0) AS SIGNED)))));
-- index creating is necessary
select * from t1 inner join t0 on NOT(IFNULL(t1.c0, t1.c0));
-- 0.2, 1
select * from t1 left join t0 on NOT(IFNULL(t1.c0, t1.c0));
-- 0.2, NULL
-- wrong result based on the inner join result
select * from t1 where exists(select 1 from t0 where NOT(IFNULL(t1.c0, t1.c0)));
-- 0.2
select * from t1 where not exists(select 1 from t0 where NOT(IFNULL(t1.c0, t1.c0)));
-- 0.2
-- semi join and anti-join should contradict with each other
```
How to repeat:
```
CREATE TABLE t1(c0 FLOAT);
CREATE TABLE t0(c0 INT);
INSERT INTO t1(c0) VALUES(0.2);
INSERT INTO t0(c0) VALUES(1);
CREATE INDEX i0 ON t1((((CAST(IFNULL(t1.c0, t1.c0) AS SIGNED)))));
select * from t1 inner join t0 on NOT(IFNULL(t1.c0, t1.c0));
-- 0.2, 1
select * from t1 left join t0 on NOT(IFNULL(t1.c0, t1.c0));
-- 0.2, NULL
select * from t1 where exists(select 1 from t0 where NOT(IFNULL(t1.c0, t1.c0)));
-- 0.2
select * from t1 where not exists(select 1 from t0 where NOT(IFNULL(t1.c0, t1.c0)));
-- 0.2
```