Risolto:

Il problema non era nel LEFT JOIN ma nel WHERE, anzi nell'AND li ci voleva un OR.

E infatti modificando quel punto con WHERE categorie.visibile = 1 OR titoli.visibile = 1 tutto torna, come si vede nel risultato della query.