• SELECT s.* FROM Students s

    JOIN StudentExam se

    ON s.StID=se.StID

    WHERE se.ExamName<>'SQL Server'

    is definitely NOT the query to be used to retrieve:

    The students that has not taken "SQL Server" exam

    in the given data architecture...

    It is a query to get:

    The students that has taken an exam that is NOT "SQL Server".

    And it successfully delivers the expected result.

    What if there are students that has not taken ANY exams ?

    So, I don't think this is a pitfall of "<>" operator at all !

    The query should be in the final form that the author suggests to begin with....