It is the first time a team has come back from a two-goal first-leg deficit without the benefit of an away goal.
The 4-0 defeat equals AC Milan's heaviest ever loss in the Champions League, while Barcelona remain unbeaten in 20 home matches in the competition.
Lionel Messi opened the scoring in the fifth minute, when he played a neat one-two with Xavi and sent the ball into the top corner, for his 52nd of the season.
Barca had two penalty shouts, and Messi should have made more of a headed chance, before Milan’s M'Baye Niang hit the post against the run of play.
Minutes later Messi levelled the scores with a fizzing low drive as Barca kept up the pressure.
David Villa put the Catalans ahead on aggregate with a clinical finish, after he was picked out in the box by Xavi.
Milan coach Massimiliano Allegri brought on Robinho, who almost produced a breakthrough, after fellow substitute Bojan Krkic sent in a cross for the former Manchester City striker, but Jordi Alba rushed in to block the shot.
And the defender had his name on the scoresheet moments later, when he burst forward on the counter attack after a Milan free-kick and hit home to make it 4-0.
Barca's successive losses to archrivals Real Madrid, in the Spanish Cup and League, and a run of 13 games without a clean sheet had caused many to question whether this was the beginning of the end for the Catalans, but it was a very different Barcelona from the team that lost 2-0 in the first leg, with just one shot on target.