Both of your examples will produce the same code.
But there's a technical difference:
"#define" defines a MACRO, which causes a text substitution when you use it. (This is sort-of copied from the C language. Most assemblers (including MPASM) have another type of macro common to assemblers that works differently.)
"equ" defines a label-style SYMBOL, which gets assigned a (numeric, I think) value, and you can use it where you would have used that value.
So since D0_ON is just a number, your examples behave the same.
But you could have said:
#define D0_ON GPIO,4
bsif D0_ON ;; turn on just the specified bit
while D0_ON equ GPIO,4 would have caused an error.
A major reason to use the #define form is that the same set of definitions can be used for C programs as well as assembler.
A major reason to use the "equ" form is that the symbol will show up in cross reference listings and debuggers.