Here is the summary from original M8 release page:
This guide should also be useful: Free-Form & External Input. While both things you mentioned are a part of integration of Wolfram|Alpha (W|A) and Wolfram Language (WL), the difference is in the interface, goal and type of output they give you. Free-form input (FFI) via
CTRL+= is great, for example, for quick-typing of FFI and its quick automatic conversion into entities, units, and other Wolfram Knowledgebase things. Hence
CTRL+= is great for quick discovering of various numerous built-in quantities and other bits of knowledge that is so large it is very hard to grasp via some general overview.
CTRL+= attempts to give the best semantic interpretation of the specified free-form string as a WL expression and can be used inside other WL expressions. In that sense it is a quick-interface embodiment of its programatic form SemanticInterpretation (do not confuse with Interpreter, which is another wonderful related function working a bit differently). As they seek a WL expression as an output you can quickly test the boundaries and see the difference with
WolframAlpha[...] function. For instance, try this out:
In:=SemanticInterpretation["tell me a joke"]
As expected no WL expression form is found as there is none to find. On the other hand behold
This works as full W|A output is returned.
WolframAlpha[...] interface embodiment is double-equal tap:
WolframAlpha[...] is great for controlled programmatic yield of various outputs, for instance
data= WolframAlpha["sun spots",
the code for which is automatically generated as explained HERE