In my opinion, it is ok to use output = netD(fake) without .detach(). I have found some code that does not use the detach() during training the D, for example, discoGAN 22.
I suppose that the reason why using detach() is the efficiency.