Checking for NULL before deleting and setting a pointer to NULL after deletion is troublesome in my opinion for many reasons.
Not only is it useless code and needless work (C++ guarantees that deleting NULL is a no-op). Code that doesn't add value should not be written. More code means not only extra opportunities for mistakes and wasted CPU cycles, but also "noise". Your brain can do so and so many things per second, and more text means that it needs to pick up more information. Skipping over a single if is no big deal, but then again, something that is entirely useless is kind of "expensive" even when the cost is otherwise neglegible.
But more importantly, it is also the wrong approach. Deleting resources should be well-defined, controlled, and guaranteed (read as: exception safe). It should not be "random" or some kind of guesswork with workarounds that prevent a crash when things go wrong. If you double-delete an object, that is a programming error which needs to be corrected. This should never happen. If it happens, your program should crash, and it should crash early. If you prevent your program from crashing, you are coalescing wrong behaviour.
Also, the if(ptr) delete ptr; idiom can be a source of many-hours-wasted in "works fine in debugger, crashes otherwise" type of errors. When you have an uninitialized pointer and run the code in a debugger, this will "magically" work, because the debugger zero-initializes the variable.
It would of course also "magically work" without the if condition (since the standard guarantees that). However, you have a chance (depends on the quality of your allocator and/or CRT and/or debugger) to get a "deleted null pointer in line..." warning. When there is an if(ptr) in the way, delete is never called. You've successfully eleminated the most helpful hint that would tell you what has gone wrong.
When you run the program outside the debugger, it will attempt to delete some random memory address and crash (or, if you are very unlucky... not crash, or crash sometimes, because you've incidentially gotten a valid address). So you spend hours trying to figure why it works "fine" in the debugger, but crashes otherwise.