With Virtualtable you can assign from another dataset. Bufdataset can't (even tried it with loadfromstream). Still strange, because TSQLQuery is an inheritence of TBufDataset.
Memdataset can do this, but what Thaddy says, it's less powerfull than Bufdataset.
Hopefully in the future bufdataset will be equivalent with virtualtable