On-loan striker Roque Santa Cruz scored the opener midway through the first half and substitute Jorge Molina made the points safe in injury time.
Sporting played the entire second half a man light after Alberto Lora was sent off a minute before half-time after picking up two yellow cards in six minutes for two fouls on Jefferson Montero.
And they finished the game two men down after Carmelo was also shown a second yellow seconds from the final whistle.
The result lifted Betis into mid-table, but kept Sporting second bottom, two points from safety.
Betis, clearly full of confidence because of their recent form, started well and Ruben Castro's shot brought a parry from Sporting goalkeeper Juan Pablo.
Paraguay striker Santa Cruz, on loan from Manchester City, put the hosts ahead in the 23rd minute with a low finish into the right corner from Benat's cross.
Sporting almost responded straight away, but Miguel De Las Cuevas' shot was brilliantly tipped over by keeper Casto.
Both sides continued to create chances with Castro firing against a post and David Barral bringing another decent save out of Casto at the other end.
Things got more difficult for Sporting just before the break, though, as Lora was dismissed after collecting two yellows in quick succession.
But Barral almost got the 10 men level in first-half stoppage time, only for Casto to again deny him with a smart parry.
Both sides tightened up defensively after the break, but Betis might have doubled their lead in the 75th minute only for Castro to shoot wide from six yards.
Mario then worked Pablo as Betis continued to look for a second to kill the game off.
It arrived in the second minute of time added on when Molina, who had come on for Santa Cruz after 60 minutes, played a neat one-two with Jonathan and, through on goal, finished smartly.
And there was still time for things to get worse for Sporting when Carmelo was sent off as the visitors lost their discipline.