Cette ressource traite de manière exhaustive le sujet. Grossièrement, si la négation porte sur l'ensemble du complément d'objet, en traduisant un manque, une absence, alors on utilise "de". Sinon, "un". Dans les exemples suivants :
Il ne voulait pas avoir de chien, il voulait avoir un chat.
La négation porte sur "avoir de chien" : il refuse d'avoir un chien, il ne le supporte pas. Il y a absence de volonté d'avoir un chien. Le sens est général, et le contexte ajoute qu'il préfère un chat.
Il ne voulait pas avoir un chien, il voulait avoir un chat.
La négation porte sur "un chien" : on insiste sur le fait qu'il veut quelque chose, mais ce n'est pas "un chien". Le sens est identique à la phrase précédente, mis à part l'insistance sur le fait que "un chien" n'est pas l'objet convoité. Si ce n'est pas "un chien", c'est donc plusieurs chiens ou un autre animal.
La négation aurait aussi pu porter sur "avoir" si la suite de la phrase n'avait pas précisé qu'il voulait un chat. La phrase aurait pu être :
Il ne voulait pas avoir un chien, il voulait s'amuser avec un chien.
On retrouve donc l'exemple B.1. Quant à B.2, cela désigne une nouvelle fois que toute l'action "avoir un chien" est niée, et le contexte ajoute qu'il aurait voulu caresser un chien. Par exemple :
Le voyou s'est introduit dans le chenil. Non, il n'a rien volé. Il ne voulait pas de chien. Il voulait juste caresser un chien.