Q:

Performáticamente falando, é bom usar Self Join?

Referente a essa pergunta: Para que serve um "self join", tecnicamente falando é performático fazer isso, ou usar 1N, 2N e 3N (formas normais) é a melhor maneira?
Só lembrando que nunca afirmei que um quebra regra do outro, é, puramente sobre performática entre os dois.

A:

Não creio haver diferença em performance entre fazer uma junção de uma tabela com outra, ou de uma tabela com ela mesma. Não tenho dados para embasar essa resposta, exceto a ausência de evidência em contrário (poderia fazer benchmarks para comprovar isso - em diferentes SGBDs - mas do ponto de vista lógico é a mesma coisa um ou outro).
(minto: há a possibilidade delas serem até mais eficientes que joins externos - uma vez que há apenas um conjunto de meta-dados, índices e dados em si para se armazenar na memória durante uma query. Mas isso é especulação, somente benchmarks poderiam comprovar isso de fato.)
Se você se refere a implementar uma estrutura de árvore usando self join, não é uma boa ideia, mas não pela questão da performance - e sim porque isso complica demais certas queries (em particular se a árvore for profunda). Mas as queries que você conseguir fazer, devem ser tão eficientes quanto queries com joins a outras tabelas.
Mas outros usos devem ser ok. Acabei de acrescentar uma nova resposta à pergunta linkada, dando um outro exemplo de uso prático do self join (no caso, um left outer join). Infelizmente não posso falar muito sobre a performance dele, pois embora eu tenha implementado isso em um sistema real, este nunca teve um volume grande de dados ou de acessos, de modo que não sei qual será sua performance quando/se atingir larga escala.
P.S. A propósito, não há nada nos self joins que viole em si as formas normais. Você pode muito bem ter um modelo normalizado com referências de uma tabela pra si mesma.

