My main point about the evals was "consistency" -- if eval gets called for matched inner tuples, it should get called for the unmatched NULL inner tuple. There is also an issue of consistency/orthogonality that eval should be called the same way for nestloop and NLIJ as much as possible. NLIJ is slightly different in its need to evaluate the LHS key component expressions but no RHS key component expressions (since they are implied by the choice of index). Nestloop will have more general filter expressions that can theoretically be more free-form combinations of LHS and RHS subexpressions.