Tienes razón en que NULL cannot be equal to anything
.
Lo que te falta es que NULL no puede ser desigual , ya sea
.
NULL
comparado con cualquier cosa siempre es NULL
. El problema en cuestión es que obtuviste el LEFT JOIN
equivocado. Esto debería funcionar:
SELECT v.user_id, v.version_id, vv.user_id
FROM versions v
LEFT JOIN versions_votes vv ON v.version_id = vv.version_id
AND vv.user_id = 39
WHERE vv.version_id IS NULL
ORDER BY v.created
LIMIT 1;
Tenías una condición adicional que hace referencia a vv
en el WHERE
cláusula:AND vv.user_id != 39
. Probablemente esperaba que NULL != 39
calificaría, pero no lo hace. Más detalles en esta respuesta relacionada:
La consulta con LEFT JOIN no devuelve filas para el conteo de 0
Hay básicamente tres técnicas para hacer esto:
Seleccionar filas que no están presentes en otra tabla