Zerg cannot win in the late game:
They have three air-combat units: mutalisk, corruptor, and brood-lord.
The Protoss have the void-ray, oracle, tempest, carrier, mothership, and phoenix.
The Terran has the battlecruiser, banshee, raven, valkyrie, and liberator.
Thats 3, 6, and 5 air-combat units respectively.
While the oracle and raven need to do something to attack, ie charge or drop a turret, this does not even out.
The Zerg cannot beat the Protoss fleet because they don’t have the versatility or the firepower to match it.
The Zerg can beat the Terran fleet, but only at great expense.
Consider that the Zerg’s best strategy is to full rush.
Terran and Protoss players know this and utilize the one advantage that zerg don’t have: build outside the natural, expand early, and build the fleet.
This negates the Zerg’s early advantage, and forces them to mass-build counters to the fleet: corruptors and hydras.
By the time the Zerg attack the Terran or Protoss who have employed the above strategy, with roaches, there can be carriers and battle cruisers.
This obviously doesn’t work.
So the Zerg player must figure out what’s behind the wall with the only scout he or she has at that stage in the game, the overseer (or overlord with pneumatized carapace).
As this risks capping Zerg supply, it is not a great tactic, and often the scouting reveals little.
Thus if the Zerg sees the wall outside the natural, he or she must assume that the fleet will be built at some stage.
The danger here is that the Zerg player overbuilds corruptors and then loses to an all-in on the ground.
In a longer game, what can actually happen is corruptors see off the fleet, Terran or Protoss rebuilds ground troops using the freed-up supply, and Zerg’s corruptors are useless.
Thus the only logical choice is to go mutalisks or hydras, and these units are not great.
Mutalisks are slow and feeble, and you need a lot of Hydras versus the fleet to ensure a victory.
It may also be better to build Hydras because the cheapest counter is nearly always best.
Put simply its a no-brainer, the zerg are constrained by reactive play at every stage in the game if it is played well by the opponent.
Zerg has to build counters it doesn’t have, and has to rely on casters to gain the advantage on the battlefield.
Consider also that in order to build an air-counter, the Zerg need spawning pool (200m), lair (150/100), and Hydralisk den (150/100) which is timed equally to stargate and starport.
Thus while Terran and Protoss enjoy cheap, early air-counters (marine and stalker), the Zerg do not.
This makes it hard for them to amass a standing army to do a good all-round job.
The Protoss also have the advantage that their second-tier tech building (cybernetics core) doesn’t need gas!
This makes it easy for the protoss to get those second-tier units a lot more quickly than either Zerg or Terran.
Zerg is further hamstrung by the fact that they generally need to build the roach warren because roaches are cheap and good, but they cannot target air-units.
So the Zerg has to spend more, to produce their only good counter (the hydra) which arrives too late, considering that we also need to max out the natural to produce them in the numbers required.
But surely the Zerg can go straight to air?
Yes, but without a wall its useless and if mutas come up against marines or stalkers (or battlecruisers with Yamato cannon), they are dead.
The Terran also have the dire advantage that they can scan the zerg base, jump in some battlecruisers, and take out the Spire in no time at all, retreat the battlecruisers, and build some more.
So Zerg air and Zerg air counters are weak and poorly positioned on the tech tree and its a cinch to beat them.
Maybe this is why, in every league division, there are something like 1-2 Zerg players out of 10?
The Zerg suck and need earlier Hydras (or something similar), and more and better air units.