### Description

The IS NULL/IS NOT NULL only care about the nullability not the value of an expression.
Given the expression x + 1 / 2, the actual result does not matter only if it's null or not - that is, it only matters if x is null or not.
So x + 1 / 2 IS NULL becomes x IS NULL - which can be opportunistically pushed down or evaluated.
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/LocalLogicalPlanOptimizer.java
var alias = new Alias(f.source(), f.name(), null, Literal.of(f, null), f.id());
                        literals.add(alias);
                        newProjections.add(alias.toAttribute());
                    } else {
                        newProjections.add(projection);
                    }
                }
                if (literals.size() > 0) {
                    plan = new Eval(project.source(), project.child(), literals);
                    plan = new Project(project.source(), plan, newProjections);
                } else {
                    plan = project;
                }
            } else {
                plan = plan.transformExpressionsOnlyUp(
                    FieldAttribute.class,
                    f -> stats.exists(f.qualifiedName()) ? f : Literal.of(f, null)
                );
            }
            return plan;
        }
    }
    abstract static class ParameterizedOptimizerRule<SubPlan extends LogicalPlan, P> extends ParameterizedRule<SubPlan, LogicalPlan, P> {
        public final LogicalPlan apply(LogicalPlan plan, P context) {
            return plan.transformUp(typeToken(), t -> rule(t, context));
        }
        protected abstract LogicalPlan rule(SubPlan plan, P context);
    }
}