Bravo was recalled after a month out injured but the 38-year-old had a first half to forget, giving away a penalty, which was converted by Ivan Rakitic, before letting Munir El Haddadi’s shot squirm through his fingers.
Betis improved in the second period and might have engineered a comeback had Sergio Canales’ stunning free-kick, which curled beautifully into the corner, hit the net sooner than the 94th minute.
Instead, any faint hopes Betis had of pipping their rivals to second place appear now to be over, with their focus diverted to finishing in the top four.
Atletico Madrid, who they face next weekend, are only a point behind in fourth while Barcelona and Villarreal are each four points back, Barca with two games in hand.
The game that La Liga bills “El Gran Derbi” has long been one of Spain’s best, a fixture renowned for its noise, passion, fervour and, this season, tension.
Manuel Pellegrini had called it “momentous” and “immense” on Saturday and while Julen Lopetegui insisted there were no thoughts from Sevilla of revenge, the tempestuous meeting in the cup last month added some spice.
That match, which Betis won, had to be called off and restarted after Sevilla’s Joan Jordan was hit by a flag pole thrown from the crowd.
This derby was particularly significant, not just for the rivalry but the league table given, unusually, both teams sit in the top three.
Sevilla were ahead but had won just once in their last five and were also without key players, Anthony Martial injured while Jules Kounde and Lucas Ocampos were both suspended.
It was Pellegrini’s decision to put Bravo back in goal, though, ahead of the in-form Rui Silva that had the most impact.
Sevilla dominated the first half, swarming all over Betis and creating four chances in the first 10 minutes. Jordan wanted a penalty after feeling a tug of his shirt before Jesus Navas drove just wide, Youssef En-Nesyri’s poked finish had to be parried and the lively Tecatito saw a volley blocked.
A scuffle broke out after Tecatito was knocked over by Diego Carlos and then Sevilla’s opener came via three scoops.
The first was lifted out to the right by Fernando where Tecatito feathered a delightful chip past Alex Moreno and then lofted a long pass over the top for En-Nesyri to chase.
He was given a second chance after Marc Bartra’s heavy touch, the ball flying loose across the box, prompting Bravo to rush out. En-Nesyri beat him to it and tumbled, Carlos del Cerro pointing to the spot. Rakitic rolled the penalty into the corner.
Munir came on for the injured Papu Gomez while Betis appeared to be finding a foothold, Victor Ruiz misjudging a header he should have nodded in.
But another mess at the back gave Sevilla a second, Bono’s goal kick flying over the Betis backline, with Munir racing clear. He took a touch and shot but from far out and wide. Bravo should have saved but the ball crept through his hands and found the far corner.
The 40-year-old Joaquin came on for Nabil Fekir at half-time, this his 26th derby and perhaps his last, 17 years after his first.
Betis enjoyed their best spell before the hour, with Canales increasingly influential. Bono had to dive to tip a Cristian Tello effort behind and Alex Moreno would have set up a dramatic last 10 minutes had he not fired over at the back post.
Betis finally pulled one back, Canales’ free-kick swirling in from 30 yards, but Sevilla had only another minute to survive.