"It's been a long ride. We did it baby," Garcia said. "Everybody wants to be champion. I knew it was going to be a bloody war. I just couldn't let him take my dream away." Morales, 52-8 with 36 KOs, was stripped of his title when he exceeded the weight of 140 pounds (64kg) at Friday's weigh-in. Morales was slapped with a $50000 (R382000) fine after stepping on the scales at 142 pounds.
The 24-year-old Garcia won the fight on all three judges' scorecards, 116-112, 117-110 and 118-109.
Garcia was the more aggressive of the two throughout the fight, knocking the 35-year-old Morales down in the 11th round with a stinging left hook to the chin.
Garcia, who fought the final few rounds with a bloody nose, raised his record to 23-0 with 14 KOs. He needed to defeat Morales in order to claim the crown. Any other result would have left the title vacant.
"It was a difficult fight," Morales, of Mexico, said. "His type of style gave me complications."
The fight had been delayed from January so Morales could undergo gall bladder surgery.