Barca held a 2-0 lead from the first leg and never looked in real trouble of giving that up as they moved into a final against Real Madrid who beat city rivals Atletico on Tuesday.
Lionel Messi scored the only goal for the visitors with Antoine Griezmann grabbing an equaliser with three minutes to go.
Barca made by far the brighter start and Dani Alves created the first chance as he flashed a cross across the six-yard box but no Barcelona boot could get on the end of it.
The Catalans nearly had the lead after 15 minutes as some good work from Andres Iniesta saw a teasing cross heading towards Messi at the back post but Jose Angel managed to hook away the danger.
Sociedad were clearly trying to frustrate Barca but Gerardo Martino's men were the only side that looked like scoring and Xavi brought a save from Enaut Zubikarai with a stinging shot from 25 yards.
The home defence was eventually breached after 27 minutes and Sociedad only had themselves to blame.
The ball was coughed up by Angel in midfield and Messi latched onto it and surged forward before hitting a shot from the edge of the box which Zubikarai got a hand to but could not prevent from going in.
Carlos Vela saw a shot blocked away as half-time approached but Barca continued to press and Alves saw a goal chalked off for offside following a glorious passing move.
The home side came out more positively in the second half and Vela came within inches of levelling it on the night as he bent a shot in on goal but saw his effort come back off the crossbar.
Play went straight down the other end and Sociedad had Zubikarai to thank for keeping the deficit at one as first he saved from Messi after he broke through and then did an even better job of smothering Cesc Fabregas' effort from the rebound.
Barcelona had another chance to put the tie to bed as Messi found Pedro but the Spaniard decided to cross when in a good position to shoot and the ball was ushered behind.
The visitors continued to have the lion's share of the play as the game wore down and Sociedad looked resigned to their fate before Griezmann had the final say.
The ball came over the top and when the cross came in from Gonzalo Castro, the Frenchman hit a clean finish from the edge of the area but it was too little too late.