Garcia (5-4) came within two outs of throwing the first complete game of the season for the NL Central leaders. He gave up six singles, walked one and struck out six.
Trevor Rosenthal got his 36th save in 38 chances. Carpenter's bunt single broke a scoreless tie in the fifth. He hit a solo home run in the eighth.
Tom Koehler (8-10) took the loss and Miami's three-game winning streak ended.
Ichiro Suzuki singled in the Miami fifth for his 2,913th hit in the major leagues. Combined with 1,278 hits in Japan, he equaled Ty Cobb's total of 4,191. Cobb held the big league mark that Pete Rose eventually passed on his way to a record 4,256 hits.
Link to box score: St. Louis (74-41) 3, Miami (46-69) 1