How does Hash Join works with relational operators other than equality operator?
From the article you were reading (by Craig Freedman):


  Hash join shares many characteristics with merge join.  Like merge join, it requires at least one equijoin predicate, supports residual predicates, and supports all outer and semi-joins.


(Emphasis added)

The hash keys are built from the (required) equijoin predicates. All other predicates are evaluated during the bucket scan, hence the name "residual predicate".

In your example, Name would be used to form the hash key. The age predicate would be evaluated on all rows in the matching hash bucket, after the initial hash probe. In cases where the hash key is not unique, the actual value of the hashed columns in the bucket will also be compared, naturally.

The execution plan properties (in SQL Server anyway) for the hash join will show you the build hash keys and any residual.