Born in Almada, Setúbal District of Angolan descent, Rafael Leao joined Sporting CP’s youth system at the age of 9 after a brief spell in Amora FC. On 21 May 2017, still a junior, he made his senior debut with the reserves, coming on as a second-half substitute and scoring in a 1–1 away draw against S.C. Braga B.
Courtesy of manager Jorge Jesus, Rafael Leao first appeared in the Primeira Liga with the first team on 11 February 2018, replacing Bryan Ruiz for the last 21 minutes of the 2–0 home win over C.D. Feirense. On 2 March, having taken the place of injured Seydou Doumbia late into the first half, he equalised for the visitors a few minutes after taking the pitch but in a 1–2 away loss to FC Porto– in the process, he became the club’s youngest-ever scorer against that opposition.
On 14 June 2018, Leão unilaterally terminated his contract at the Estádio José Alvalade, citing an incident where players and staff had been attacked by fans during training.
On 8 August 2018, Leao joined French club Lille OSC on a free transfer, signing a five-year deal. He scored his first Ligue 1 goal in only his second appearance, playing 67 minutes and helping the hosts beat Stade Malherbe Caen 1–0.