• Thanks for this article. It brings to the fore my lack of understanding of the difference between the join and where clauses.

    I still don't understand why the clause 'AND Class.ClassYear >= 2011' produces a different result when used as part of the join.

    It seems to me that it can't contribute to the join because it refers only to the values in one of the tables in the join, so on the face of it, it acts as an ersatz where, cutting down the rows in the Classes table involved in the join.

    But, that being the case, why is the result different when it's transplanted to the real where clause? Why are the rows with NULL values in the ClassYear retained?

    Would greatly appreciate it if you could clarify that for me.