There is a second, practical difference that shows up in your own code rather than in the runtime, and it is where most real performance wins come from.
Because the operations are values rather than blocking statements, you can choose to not sequence them:
// sequential — three round trips, one after another
const a = await getA();
const b = await getB();
const c = await getC();
// concurrent — three round trips at once, wait for all
const [a, b, c] = await Promise.all([getA(), getB(), getC()]);
If those three calls are independent, the second version finishes in the time of the slowest rather than the sum of all three. That option simply does not exist with blocking calls.
The common mistake, once people learn await, is writing the first version everywhere out of habit. Whenever you see several awaits in a row, ask whether any of them actually depend on the ones above.