When do I need a contextual filter vs. a relationship?
Just think of it terms of SQL: 


a 'relationship' is a JOIN on another table
a 'filter' (contextual or not) is a WHERE clause. 


'Contextual' just means the parameter comes from the current context, e.g. part of the URL, something in the session, etc