The Saints' loss ended the longest active scoring streak in the NFL.
Alvin Kamara gave up two fumbles while Wil Lutz missed a field goal as the Saints' offence struggled against San Francisco's stout defence.
It marked the first time in Kamara's career that he lost two fumbles in a game.
San Francisco then stopped the Saints after a first-and-goal from the four-yard line when Nick Bosa sacked New Orleans quarterback Andy Dalton on fourth down. The 49ers ran out the clock from there.
New Orleans had not been shut out since the final game of the 2001 season against San Francisco - the fourth-longest stretch in NFL history.
Meanwhile, the Las Vegas Raiders won in overtime for the second straight week, beating the Seattle Seahawks 40-34.
Josh Jacobs sprinted 86 yards for a game-ending touchdown, finishing with a franchise-record 229 yards rushing and two scores.
He also had six catches for 74 yards, and his 303 yards from scrimmage were the most in franchise history and the seventh-most in an NFL game in the Super Bowl era.
Las Vegas finished with 283 yards rushing and its 576 total yards were the third-most ever allowed by the Seahawks, who fell one game behind San Francisco in the NFC West.
Elsewhere, the Kansas City Chiefs slogged their way to a 26-10 victory over the beat-up Los Angeles Rams on Sunday.
Playing without Matthew Stafford, who remained in the concussion protocol, the Rams struggled to move the chains behind Bryce Perkins, a career backup making his first start. Despite a number of decent plays, he threw for just 100 yards with a touchdown pass and two interceptions.
The Rams have lost five straight and fell to 3-8, matching the 1987 Giants for the worst start through 11 games by a defending Super Bowl champion.
Also on Sunday, the Arizona Cardinals lost 25-24 when the Los Angeles Chargers scored on a touchdown pass and two-point conversion with 15 seconds left.
The Cardinals jumped out to an early 10-point lead, but the Chargers scored twice to eliminate the deficit.
The second touchdown, a 33-yard pass from quarterback Justin Herbert to a wide-open DeAndre Carter, came after coach Kliff Kingsbury opted to go for it on fourth-and-inches from Arizona's 35-yard line. Instead of handing the ball to James Conner, Arizona tried a pass play that was intercepted by Derwin James Jr.
A series of punts culminated in Los Angeles having the ball at the Cardinals 38 with 1:49 left. Herbert marched the Chargers quickly down the field and hit Austin Ekeler on a one-yard touchdown pass.
And the Philadelphia Eagles enjoyed a 40-33 victory over the Green Bay Packers on Sunday night, with Jalen Hurts running for 157 yards to set an Eagles record for a quarterback.
Hurts also threw for 153 yards and two touchdowns for the NFC-best Eagles, who moved to 10-1 for the fifth time in history. Miles Sanders ran for 143 yards and two scores as Philadelphia rushed for 363 overall, the second-best total for the franchise.
Hurts had 254 combined yards, including 126 on the ground, and threw a TD pass in the first half as the Eagles built a 27-20 lead. He ripped off runs of 42, 28 and 24 yards.
In the second half, he hit AJ Brown for a six-yard touchdown pass and a 34-20 lead that just added to his numbers.