Este artigo é antigo e está no blog do Tom Kyte :
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:442029737684
Basicamente a diferença está na verifcação de campos NULOS, o famoso NULL .
Usando NOT IN ele não verifica os campos nulos , já com NOT EXISTS ele verifica e isso dependendo do que você está fazendo vai fazer diferença.
Ex. Quero itens do conjunto A que não estão no B . Caso o conjunto B possua valores NULL na coluna de referência.Usando NOT IN você não vai conseguir traze-los e usando NOT EXISTS sim.
Acho que é isso!
bye,