El JOIN de la subconsulta es completamente irrelevante en el mensaje de error. El problema es que en el IN estás
comparando un único campo, contra dos campos.
¿Eso se entiende?
En tu caso, el campo VARIEDAD se compara contra el resultado de la subconsulta puesta en el IN(). Que exista un campo "variedad" en una de las tablas de la subconsulta no es importante, porque no se comparan por nombre, sino que se comparan los datos.
Una nota adicional: LEFT
OUTER JOIN sólo existe por compatibilidad con otros motores. La sentencia correcta para MySQL (y como la parsea) es LEFT JOIN.
Yendo a tu consulta:
Código MySQL:
Ver original id,
variedad
T1.id_var,
T2.variedad
articulos t1
variedades t2
ON t1.id_var
= t2.id
WHERE t1.articulo
='28-wilson');
La mayor parte de la sintaxis es absolutamente innecesaria para lo que quieres:
Cita: me regrese las id de la tabla variedad que no esten en la tabla articulos
La sola subconsulta ya devuelve eso, sólo que hay que escribirla correctamente:
Lo que creo que tienes que revisar y entender es la lógica de lo que vas a obtener con LEFT JOIN: Donde no hay coincidencias, devuelve NULL, por lo que jamás te podría devolver el campo id_var de la tabla artículos, si no hay coincidencias...
Creo que tienes que meditar mejor qué es lo que quieres obtener, para poder escribir correctamente la sentencia que te permita obtener datos que existan.