On 8 January 2017, Carvalho scored twice in a 3–2 home victory over Vitória S.C. B.[5] Late in that month, he signed with Vitória F.C. on a half-year loan deal.[6] He made his Primeira Liga debut with the latter on 5 February, replacing João Amaral late into the second half of an eventual 2–1 away loss to F.C. Arouca.[7] He scored his first goal in the competition on 19 March, helping to a 1–1 draw against FC Porto at the Estádio do Dragão.[8]
On 14 June 2018, Carvalho signed a five-year contract with EFL Championship side Nottingham Forest for a club-record transfer fee of £13.2m (€15 million).[11][12][13] He scored his first goal for them on 19 September in a 2–1 home win against Sheffield Wednesday,[14] finishing his first season with a further three as well as eight assists in a final ninth position.[15]
Carvalho struggled to make an impact during his second year. Following a pre-season injury, he did make a bright return by scoring a goal in a 3–0 victory over arch-rivals Derby County in the second round of the EFL Cup.[16] However, he was largely limited to substitute appearances by Sabri Lamouchi, making only nine starts[17] as the manager was reportedly frustrated by the player's lack of determination to improve his performances in training when he was left out of the starting eleven.[18]
On 29 September 2020, Carvalho was loaned to UD Almería, with the Spanish Segunda División club having an option to make the deal permanent.[19]
Carvalho was loaned to G.D. Estoril Praia for 2022–23.[25] He scored his only goal of the campaign on 15 May 2023, his 40-metre strike in the 2–0 home win over F.C. Arouca ensuring top-flight survival for another year.[26]
On 16 August 2024, Carvalho agreed to a permanent three-year contract.[27]
^"Benfica B-FC Porto B, 3–2 (crónica)" [Benfica B-FC Porto B, 3–2 (match report)] (in Portuguese). Maisfutebol. 11 January 2015. Retrieved 12 November 2017.