Houston came into the ninth trailing 5-4 but stunned the Cardinals with a pair of runs to take the first match of a three-game series.
Pinch-hitter Brian Bogusevic led off the frame with a single off Mitchell Boggs (0-1) and advanced to second on a passed ball by catcher Yadier Molina. The next batter, Michael Bourn, reached on Boggs' throwing error, which sent Bogusevic to third.
Bogusevic came home with the tying run when Boggs uncorked a wild pitch, and Hunter Pence (3-for-5) followed with a single. One out later, Hall's single chased home Bourn with the game-winning run.
Brandon Lyon (2-1) was credited with the win despite blowing a 5-4 lead in the ninth when he allowed a game-tying RBI double to former Astro Lance Berkman.
Daniel Descalso went 3-for-3 with a pair of doubles and three RBI for St. Louis.
Pregnant Mila Kunis wins 'Best Villain' at MTV Movie Awards
Charlize Theron not engaged to Sean Penn 'yet'