Dortmund beat Gladbach to finish second in Bundesliga race
Dortmund, who had a nine-point lead over Bayern in November before losing their momentum at the start of 2019, scored on the stroke of halftime through Sancho and Marco Reus added the second in the 54th minute.
But the win was not enough to carry them past Bayern, who crushed Eintracht Frankfurt 5-1 to win their seventh straight league title with 78 points.
"Clearly there was more in it this season for us than second place," said Dortmund captain Marco Reus, who has yet to win a German league title despite being among the most talented players of his generation.
"It was neck and neck between the two teams. We failed against Schalke 04 and Werder Bremen to be a step closer to the title than Bayern."
Dortmund lost to Schalke and drew with Werder Bremen before winning their last two league games. But the slip-ups proved costly as Bayern opened up a four-point lead two matchdays from the end.
"Today we hoped once more," Reus said. "We took the lead when it was 1-1 in Munich and we were hoping it would be possible.
"But at the end of the day the team that wins the title is the one that deserves it most. So congratulations."
RB Leipzig also qualified for next season's Champions League by finishing third along with fourth-placed Bayer Leverkusen.