Você está certo que
NULL cannot be equal to anything .O que está faltando é que NULL não pode ser desigual , ou .
NULL comparado a qualquer coisa é sempre NULL . O problema em questão é que você tem o LEFT JOIN errado. Isso deve 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;
Você tinha uma condição adicional referenciando
vv no WHERE cláusula:AND vv.user_id != 39 . Provavelmente esperando que NULL != 39 qualificaria, mas não. Mais detalhes nesta resposta relacionada:Consulta com LEFT JOIN não retornando linhas para contagem de 0
Existem basicamente três técnicas para fazer isso:
Selecione as linhas que não estão presentes em outra tabela