When a logical plan is built containing the following somewhat nonsensical filter:
Filter (NOT isnotnull($f0#212))
During optimization the filter is converted into a condition that will always fail:
Filter (isnotnull($f0#212) && NOT isnotnull($f0#212))
This appears to be caused by the following check for NullIntolerant:
Which recurses through the expression and extracts nested IsNotNull calls, converting them to IsNotNull calls on the attribute at the root level:
This results in the nonsensical condition above.