Le self join non sono altro che delle inner join di una tabella con sé stessa, quindi quella query che hai postato, in forma esplicita diventa:
codice:
SELECT
parent.category_id, parent.name, COUNT( product.name ) AS num_prod
FROM
nested_category AS node
INNER JOIN
nested_category AS parent
ON node.lft BETWEEN parent.lft AND parent.rgt
LEFT JOIN /*INNER JOIN*/
product
ON node.category_id = product.category_id
GROUP BY
parent.name
ORDER BY
parent.category_id
dove ho impostato il left join con la tabella product.