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