Hola de nuevo:
Me alegra mucho que hayas podido encontrar una respuesta por tu propia cuenta... tomo te mencioné en el post, hay varias formas de obtener la misma respuesta... además de NOT IN... checa este script:
Código MySQL:
Ver original+------------+----------------+
| id_materia | nombre_materia |
+------------+----------------+
| 1 | matemáticas |
| 2 | biología |
| 3 | programación |
| 4 | química |
+------------+----------------+
+-------------+-----------------+
| id_profesor | nombre_profesor |
+-------------+-----------------+
| 1 | josé |
| 2 | mario |
+-------------+-----------------+
+------------+-------------+
| id_materia | id_profesor |
+------------+-------------+
| 1 | 1 |
| 2 | 1 |
+------------+-------------+
mysql> #utilizando NOT IN
-> WHERE MP.id_profesor
= 1); +------------+----------------+
| id_materia | nombre_materia |
+------------+----------------+
| 3 | programación |
| 4 | química |
+------------+----------------+
mysql> #utilizando NOT EXISTS
-> WHERE MP.id_materia
= M.id_materia
AND MP.id_profesor
= 1); +------------+----------------+
| id_materia | nombre_materia |
+------------+----------------+
| 3 | programación |
| 4 | química |
+------------+----------------+
mysql> #utilizando LEFT JOIN
-> ON MP.id_materia
= M.id_materia
AND MP.id_profesor
= 1 +------------+----------------+
| id_materia | nombre_materia |
+------------+----------------+
| 3 | programación |
| 4 | química |
+------------+----------------+
En lo particular prefiero usar NOT EXISTS en lugar de NOT IN, pues te permite hacer comparaciones con n campos, y no solo con uno, como en el caso de NOT IN... sería conveniente también que revisaras los tiempos de respuesta entre las distintas opciones, para elegir aquella con mejor desempeño.
Saludos
Leo.