Ich denke, Sie brauchen etwas in dieser allgemeinen Richtung. Ich habe es etwas anders gemacht als deine Frage. Anstatt die Top 10 zu erhalten, werden dann Datensätze entfernt. Es bekommt die Top 10 Datensätze, die nicht versteckt werden würden.
SELECT c.ID, c.fromuserid, c.roomid, c.text, u.nickname
FROM chats c
JOIN user u ON c.fromuserid = u.id
where c.roomid = 3 AND user.banned = 0
AND NOT EXISTS(
SELECT * FROM hide h
WHERE h.hideuser = c.fromuserid
AND orguser = $userid)
ORDER BY c.ID DESC
LIMIT 0,10