Details
Description
When FilterExec contains isNotNull, which could be inferred and pushed down or users specified, we convert the nullability of the involved columns if the top-layer expression is null-intolerant. However, this is not true, if the top-layer expression is not a leaf expression, it could still tolerate the null when it has null-tolerant child expression.
For example, cast(coalesce(a#5, a#15) as double). Although cast is a null-intolerant expression, but obviously coalesce is a null-tolerant.
When the nullability is wrong, we could generate incorrect results in different cases.