What is a residual predicate?
A residual predicate is one that has an hidden extra cost because the predicate has to be tested again on every combination of rows that is fetched.

See Probe Residual when you have a Hash Match – a hidden cost in execution plans by Rob Farley.