il JOIN serve appunto ad "unire" in un unica select tutte queste informazioni provenienti dalle 3 tabelle, per cui alla fine hai nella visualizzazione del record messaggi sia la sottocategoria che la categoria di appartenenza... in pratica la join mette in relazione tra loro le tabelle.
si, il concetto è quello, devi avere l'ID del padre nel record della tabella, però ti sconsiglio di fare tutto con una tabella sola, è più confusionario e difficile da gestire, se impari ad usare le JOIN ti accorgerai che sono molto potenti e che ti possono aiutare in molti casi.
volendo puoi anche fare a meno della JOIN nella select, te le fai da te in questo modo con la WHERE:
SELECT tabA.,tabB.,tabC.* from tabellaA as tabA,tabellaB as tabB,tabellaC as tabC WHERE tabA.Codice=tabB.CategoriaAppartenenza AND tabC.SottoCategoriaAppartenenza=TabB.Codice
la JOIN invece sarebbe:
SELECT tabA.,tabB.,tabC.* from tabellaA as tabA LEFT JOIN tabellaB as tabB ON tabA.Codice=tabB.CategoriaAppartenenza LEFT JOIN tabellaC as tabC ON tabB.Codice=tabC.SottoCategoriaAppartenenza
praticamente è la stessa cosa ma la JOIN ti permette anche di ottenere risultati diversi a seconda del tipo di JOIN (INNER JOIN, LEFT o RIGHT, LEFT OUTER o RIGHT OUTER, ecc...).
comunque se quello che vuoi fare è una specie di "forum" probabilmente devi fare la JOIN tra la Tabella A e la Tabella B, visualizzi quindi l'elenco delle categorie con le sottocategorie, il link sulla sottocategoria ti porta ai messaggi.
In realtà nei forums siamo su più livelli, ce ne sono almeno 4: Categoria,SottoCategoria,Discussione,Messaggi