Sevilla had won their previous four games in all competitions and were six unbeaten, and they dominated Thursday night's game.
They somehow came away facing an imposing second-leg test next week, though, after Leo Baptistao's first-half header and Salva Sevilla's well-taken second gave Betis victory.
Visiting goalkeeper Antonio Adan denied Carlos Bacca a very early opener and the same forward had another effort blocked by Damien Perquis.
The breakthrough came against the run of play in the 15th minute when Juanfran crossed from the right and Leo Baptistao met the ball with a powerful diving header which flashed high inside the near post.
Sevilla responded and Bacca headed straight at Adan when well placed, with Vicente Iborra's follow-up blocked.
Full-back Alberto Moreno then overlapped well to link up with Jose Antonio Reyes and cut inside before sending a left-foot shot fizzing just over.
Sevilla goalkeeper Antonio Beto saved well from Cedrick Mabwati's header and his side broke quickly, the move ending with a delicious ball in by Reyes which was clipped just wide of the near post by Vitolo Machin.
Defender Federico Fazio headed high over the bar from a corner and Adan saved with his foot when Reyes maybe should have done better.
Sevilla sent on Kevin Gameiro and Diogo Figueiras at half-time, Sebastian Cristoforo and Coke Andujar making way, but the second half was held up briefly when a flare was thrown on to the pitch.
Baptistao's low shot was well saved by Beto and at the other end, Gameiro poked wide on the turn amid a crowd of defenders.
Worse was to follow for the substitute as Ivan Rakitic's outside-of-the-foot cross found him unmarked a yard out from an open goal, but the diminutive Frenchman could not get over the ball and headed over.
And he and Sevilla were punished when Betis again landed a shock counter-punch, Baptistao finding Salva who turned Fazio and finished clinically from 12 yards.
They lost Lorenzo Reyes to injury, though, after his left leg buckled beneath him as he played the ball to Baptistao in the build-up. Antonio Amaya replaced him.
Adan required treatment after being caught as he punched away Reyes' free-kick.
Sevilla's frustration showed as Fernando Navarro needlessly tangled with medical staff as they left the field, and again when Figueiras pushed Baptistao over off the ball, and they were unable to get themselves on the scoresheet.