Ciao, dopo tutti questi post non ho ben capito a che punto tu sia del problema, io ti posto la query come la farei io, tenendo conto che nelle join uso come convenzione chiamare le tabelle come a, b, c ... e così via e i nomi dei campi CamelCase per maggiore comprensibilità:

Codice PHP:
SELECT a.id AS idCategoriaa.nome AS nomeCategoriab.id AS idProdottob.nome AS nomeProdotto FROM TABELLA_CATEGORIE a LEFT JOIN TABELLA_PRODOTTI b ON a.id b.category_id WHERE a.visible 
Non ho ben capito l'uso dei campi 'lft' e 'rgt' ma immagino il tuo obiettivo fosse quello di organizzare le categorie su più livelli, per questo scopo personalmente uso le tabelle ricorsive, dove ogni id ha un id parent e un id radice.
Spero di essere stato utile.
Ciao