Teheran scattered five hits and fanned six to improve to 11-and-8. Daniel Castro homered, tripled, and scored twice to lead Atlanta.
Jaime Garcia gave up two runs over four frames to take the loss for St. Louis, which rested most of its regular starters.
Brandon Moss was 2-for-2 with two walks for the Cards.
Adam Wainwright tossed a three up, three down sixth inning out of the bullpen for St. Louis.