No use NOT IN
con subconsultas. Tiene la semántica incorrecta si algún valor en la subconsulta es NULL
. En ese caso, el NOT IN
nunca se evalúa como VERDADERO, por lo que no se devuelve ninguna fila.
En su lugar, utilice NOT EXISTS
:
SELECT p.id, p.name
FROM players p
WHERE p.this = 1 AND
NOT EXISTS (SELECT 1
FROM players_online po
WHERE po.name = p.name AND po.this = 'that'
)
ORDER BY RAND()
LIMIT 3, 6;