I would say that NLJ is consistent in its inconsistency! The eval is not called either on matched outer/inner tuples not on unmatched inner one. The NLIJ is definitely inconsistent - the eval call is missing for the unmatched inner tuple. 
I am just curios, is there a reason not to call eval at all in NLJ or is it a simple miss?