Tyler Bozak, Ivan Barbashev and David Perron scored for St. Louis (27-10-7), which was 0-2-1 in its past three games following an eight-game winning streak.
It was the first game between the teams since the Blues eliminated the Sharks in Game 6 of the 2019 Western Conference Final.
"We did enough," Perron said. "I don't know that we were clean and had good energy all night long, but it certainly was enough to get the win tonight. After the trip, the travel and all that stuff that happened the last week, it's certainly nice."
WATCH: [All Sharks vs. Blues highlights]
Erik Karlsson had a goal and an assist, and Aaron Dell made 24 saves for San Jose (19-22-4), which went 2-2-1 on a five-game road trip.
"Today was a pretty good game," Sharks forward Tomas Hertl said. "It was kind of up and down. I had a huge chance to score in the second and it would be a different game. We had a lot of chances, and we have to be better. When we go behind against this team, it's tough."
Sharks captain Logan Couture left the game with an apparent left knee injury at 7:32 of the second period after he collided with Blues defenseman Vince Dunn and the end boards behind St. Louis' goal. Couture, an all-star, was clutching his knee before needing help off the ice.
Sharks coach Bob Boughner said it's a lower-body injury and X-rays appeared to be negative. Couture accompanied the team to San Jose in a walking boot and will be reevaluated Wednesday.
"It's big time concerning, even if it's just a couple games or whatever, if it's a couple weeks," Boughner said. "... He's a catalyst of our offense, penalty kill, and everything. It'll be a tough loss but hopefully it's not too long and it's a day-to-day thing, so we'll have a better idea about that tomorrow. When a guy like that goes down, everybody is very shocked."
Bozak put St. Louis ahead 1-0 at 5:39 of the second period on a give-and-go with Alexander Steen after Brayden Schenn poked the puck away from Evander Kane.