so lets say you throw down the three cannons, you hold off the push and then you roll out to get a new base up. Suddenly your opponent has a use for that "useless army." He can use it to kill your new base. Yes you could always build more cannons to hold of this push but now you've built cannons in two places, if you had defended with units you would be able to use those same units to defend the new expo. This effect tends to really add up over longer games because static defenses can only protect one spot while an army can move to counter new threats. Additionally all three races have quick efficient solutions to static defenses in their tier two tech that they can use to punish a reliance on static defenses. the immortal and the roach both trade very effectively with defenses allowing protoss and zerg to just bust in. Meanwhile terran can either sit back with siege tanks which outrange defenses or just drop with a medivac.
In response to the air issue, air compositions can be very potent but not without support. If those 200 marines stim and run under the void rays they will evaporate in seconds. Additionally spells like storm and fungal can do absolutely massive damage to stacked air units and if the air player takes time to spread his units effectively he is sacrificing critical dps.
In short neither is actually a bad strategy but they are both easily punished by a player who knows what they are doing.