Quería ejecutar una consulta simple para arrojar todas las filas de Table1donde un valor de columna principal no está presente en una columna en otra tabla ( Table2).
Intenté usar:
SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal
Esto, en cambio, arroja un error de sintaxis. La búsqueda en Google me llevó a foros donde la gente decía que MySQL no es compatible NOT INy que algo extremadamente complejo debe ser utilizado. ¿Es esto cierto? ¿O estoy cometiendo un error horrendo?

Respuestas:
Para usar IN, debe tener un conjunto, use esta sintaxis en su lugar:
fuente
table2.principalpuede serNULL. En ese casoNOT IN, siempre se devolveráFALSEporqueNOT INse trata como<> ALL, que compara todas las filas de la subconsulta comoTable1.principal <> table2.principal, lo que falla cuando se compara conNULL:Table1.principal <> NULLno dará como resultadoTRUE. Para solucionar:NOT IN (SELECT principal FROM table2 WHERE principal IS NOT NULL).La opción de subconsulta ya ha sido respondida, pero tenga en cuenta que en muchos casos a
LEFT JOINpuede ser una forma más rápida de hacer esto:Si desea verificar varias tablas para asegurarse de que no esté presente en ninguna de las tablas (como en el comentario de SRKR), puede usar esto:
fuente
NOT INyLEFT JOIN. +1 ambosNO ESTÁ EN CONTRA NO EXISTE en ÚNICO IZQUIERDO / ES NULO en MySQL
[...]
[...]
[...]
(énfasis agregado)
fuente
Desafortunadamente, parece ser un problema con el uso de MySql de la cláusula "NOT IN", la captura de pantalla a continuación muestra la opción de subconsulta que devuelve resultados incorrectos:
fuente
¡Cuidado,
NOT INno es un alias para<> ANY, sino para<> ALL!http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html
no puede ser reemplazado por
Debes usar
fuente