They are effectively the same. While there is a difference with non-virtual destructors, once you stick virtual in there, it cannot be trivial anymore.
This is not the only time that = default leads to the generation of a non-trivial special member function. For example, if you have a member that has a non-trivial destructor, then using = default will not cause the creation of a trivial destructor for the containing type, even with a non-virtual destructor.
You should use = default anyway, just to make it clear what your intentions are.