Hola SadlyMistaken:
Dependiendo de tu información y cómo tienes administrados tus índices el utilizar una expresión IN puede resultar muy costoso, en lo particular prefiero utilizar las cláusulas EXISTS o NOT EXISTS para hacer este tipo de comparaciones, ya que entre otras ventajas te permite comparar contra varios campos, no solo contra uno, te pongo un ejemplo para tratar de explicarme mejor.
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.16 sec)
Query OK, 3 rows affected (0.08 sec)
+------+-------------+
| id | descripcion |
+------+-------------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
+------+-------------+
Query OK, 0 rows affected (0.16 sec)
Query OK, 2 rows affected (0.03 sec)
+------+-------------+
| id | descripcion |
+------+-------------+
| 1 | uno |
| 2 | otro dos |
+------+-------------+
-> A.descripcion = B.descripcion);
+------+-------------+
| id | descripcion |
+------+-------------+
| 2 | dos |
| 3 | tres |
+------+-------------+
Observa que en la comparación NOT EXISTS estoy utilizando los campos ID y DESCRIPCION para comparar, el ID = 1 existe tanto en la tabla A como en la tabla B, con la misma descripción, por lo tanto no lo muestra en la salida final.
En las tablas A y B existe un id = 2, pero la descripción es diferente, por lo tanto no la elimina del listado. Si solo necesitas comparar por un campo lo puedes hacer perfectamente. Te repito, es cuestión de cómo tienes organizada tu información. En lo particular siempre he visto un mejor performance del servidor con este tipo de consultas. Podrías probar las tres opciones que tienes (utilizando LEFT JOIN, NOT IN y NOT EXISTS) para ver cual de ellas es más eficiente.
Saludos
Leo.