On 27 June 2017, after returning from the UEFA European Under-21 Championship, Fernandes joined Sporting CP for five years, for a reported fee of €8.5 million plus bonuses and a buyout clause of €100 million. He scored four goals in his first five Primeira Liga games, including a brace in a 5–0 away win against Vitória de Guimarães.
Fernandes’ first appearance in the UEFA Champions League group stage was on 12 September 2017, where he put the visitors 3–0 ahead in the 43rd minute of an eventual 3–2 win at Olympiacos FC. He finished his first season with 16 goals across all competitions, second only to Bas Dost.
On 15 May 2018, Fernandes and several of his teammates, including coaches, were injured following an attack by around 50 Sporting supporters at the club’s training ground after the team finished third in the league and missed out on Champions League qualification. Despite the events, the team agreed to play in the final of the Taça de Portugal scheduled for the following weekend, eventually losing to C.D. Aves.
Fernandes was named the Primeira Liga Player of the Year on 6 July 2018. Four days later he signed a new five-year contract with a €100 million release clause, having turned back on his original decision to leave the Estádio José Alvalade following the departure of club president Bruno de Carvalho, and being given an improved salary in the process.
Fernandes scored his 23rd competitive goal of the 2018–19 campaign during a 3–1 home win against Portimonense S.C. on 3 March 2019, through a late penalty, surpassing António Oliveira’s club record for goals by a midfielder in a season, set in 1981–82. On 5 May, he scored a hat-trick in an 8–1 away rout of Belenenses SAD, in the process becoming the highest-scoring Portuguese midfielder in a single season of all time, with 31 goals to his name. He scored his 33rd and final goal of the season on 25 May 2019, during Sporting’s victory against FC Porto in the Taça de Portugal final. He was named Primeira Liga Player of the Year for the second successive year for his performances in the 2018–19 season.
He scored seven goals in his first 10 appearances of the 2019–20 season, including a run of scoring in six consecutive appearances. This made him the third Sporting player in the 21st century to score in six or more consecutive appearances for the club, after Mário Jardel and Bas Dost. On 28 November 2019, he scored twice and assisted the other two goals in a 4–0 victory over PSV Eindhoven, which guaranteed Sporting qualification to the knockout stages of the UEFA Europa League.