You are right that they look identical from inside the function, and that is precisely the design goal — the whole point of the syntax is that asynchronous code reads like sequential code.
The difference is entirely outside the function.
When your function hits await, it returns control to the runtime. The single thread is now free to do something else: handle an incoming request, respond to a click, run a timer callback, process another user's work. When the awaited operation completes, your function is resumed from where it stopped.
A truly blocking call would hold the thread for the whole duration. Nothing else runs. On a server that means one slow database query stops every other request; in a browser it means the page freezes and does not even repaint.
So await does block your function and does not block the thread. Those are two different things and the confusion between them is the entire question.