The 37-year-old Percival was in position for his first victory since April 22, 2005, after he pitched a perfect seventh inning. He watched from the bench as the Cardinals pulled it out with three runs in the eighth.
The former All-Star closer made his first major league appearance since July 9, 2005, with Detroit. Percival is 12th on the career list with 324 saves, but hadn't pitched in nearly two years because of persistent soreness in his right shoulder.
Percival signed a minor league deal with St. Louis on June 8, made six appearances in Triple-A, then was added to the roster on Tuesday. The Cardinals' comeback made his long-awaited return a happy one.
The Reds were booed at home _ a common occurrence these days _ after one of the NL's worst bullpens failed to hold a 2-1 lead. The Reds fell a season-low 20 games under .500, leaving them with the worst record in the majors at 30-50.
Cincinnati is on pace to lose 100 games for the first time since 1982. The bullpen has been the biggest problem, losing an NL-leading 18 games so far.
Marcus McBeth (2-2) opened the seventh by giving up a double to Aaron Miles and a single to Albert Pujols, the third of his three hits. Chris Duncan's single to center off Jon Coutlangus tied it at 2.
Encarnacion's single off Brad Salmon broke the tie, and Yadier Molina singled home another run for a 4-2 lead. Jason Isringhausen pitched the ninth for his 15th save in 17 chances.