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