Creo que te falto un LEFT JOIN mas para recoger bien los datos de las 3 tablas, ahi imagine que la tabla categorias tiene un campo id como identificador clave. Prueba y a ver si te funciona o te da una idea de lo que fallaba.
Código:
SELECT C.usuario, C.categoria, P.categoria
FROM compradores C LEFT JOIN productos P ON C.categoria = P.categoria
LEFT JOIN categorias CAT ON P.categoria=CAT.id
WHERE C.usuario = val;