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"]
Out[]=$Failed
and similarly:

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",
{{"SunspotsFullTimeSeries:SpaceWeatherData",1},"TimeSeriesData"}];
DateListPlot[data]

the code for which is automatically generated as explained HERE
