You are comparing apples and oranges.
load() loads a resource into memory.
instance() takes a PackedScene resource and creates all of its packed nodes.
When you click the "link" button in the editor, you're doing both, plus adding it to the scene tree.
Instancing in code versus the editor is the same thing in the end. One is not "better", but they have very different use cases. Bullets, for example - you don't instance the bullet in the editor, because then you'd only have one bullet there. Instead, you want to instance one in code every time the player pushes the "shoot" button.