I have two tables: \'movies\' and \'users\'. There\'s an n:m relationship between those, describing what movies a user has seen. This is described with a table \'seen\' Now
Seen is your join table, so yes, this looks like the correct solution. You are effectively "subtracting" the set of movie IDs in SEEN (for a user) from the totality in MOVIES, resulting in the unseen movies for that user.
This is called a "negative join", and sadly NOT IN or NOT EXISTS are the best options. (I would love to see a negative join syntax that was similar to INNER/OUTER/LEFT/RIGHT joins, but where the ON clause could be a subtraction statement).
@Bill's solution without a subquery should work, although as he noted it is a good idea to test your solution for performance both ways. I suspect that subquery or not, the entire SEEN.ID index (and of course the entire MOVIE.ID index) is going to be evaluated both ways: it will depend on how the optimizer handles it from there.