KAA Gent
In January 2018, David joined Belgian First Division A side KAA Gent. He made his professional debut on August 4, 2018, against Zulte Waregem and scored a goal in stoppage time to salvage a 1–1 draw. Just five days after his league debut, David came in as a second-half substitute in a Europa League third round qualifier against Jagiellonia Białystok, scoring a goal in the 85th minute to secure a 1–0 win for his team.
David continued his scoring streak three days later, coming in as a 71st-minute substitute and scoring two late goals to secure a 4–1 league win against Waasland-Beveren. After scoring five goals in his first five games, Gent signed David to a contract extension through 2022. He further extended his contract by a year to 2023 in September 2019. In the January 2020 transfer window, Gent chairman Ivan de Witte indicated there was significant interest in David from bigger clubs, with his value estimated at €20 million.
2020–21: Ligue 1 champion
On August 11, 2020, Ligue 1 side Lille confirmed the signing of David on a five-year contract. The reported fee for David was €30 million, making him the most expensive Canadian transfer to date. He made his competitive debut for Lille on August 22 against Rennes in their Ligue 1 season opener, becoming the first Canadian to play in Ligue 1. After a difficult start to the season, David scored his first goal for Lille on November 22 against Lorient, netting the final goal in a 4–0 victory, and becoming the first Canadian to score in Ligue 1.
After going scoreless in his previous seven games, David netted an extra-time winner against Reims to even Lille on points with Paris Saint-Germain (PSG) at the top of the table. On February 3, 2021, David scored as Lille defeated Bordeaux by a score of 3–0. Continuing his run of form, David netted his first career Ligue 1 brace, scoring two goals on February 7 against Nantes. After only scoring two goals during the first half of the 2020–21 campaign, this brace marked David's fifth goal in as many games. On April 3, he scored the winning goal in a 1–0 away win over PSG, to be Lille's first away league win over the Parisians since April 1996.
On May 23, he scored a goal in a 2–1 away win over Angers to win the 2020–21 Ligue 1 with Lille. David finished his first season with 13 league goals, with 11 coming since the turn of the year. This included the winner against PSG in a closely contested match at the Parc des Princes and a late double against Marseille, becoming an important player for Lille's title charge and one of the league's most in-form players.
2021–2025
On November 2, 2021, David scored his first UEFA Champions League goal from a penalty in a 2–1 away victory over Sevilla. During the 2022–23 season, he netted 24 goals in Ligue 1, marking his personal best and securing third place on the top scorers list, only behind Kylian Mbappé and Alexandre Lacazette. In the following season, he scored 19 goals, finishing as joint-second top scorer, with only Kylian Mbappé ahead of him. On October 2, 2024, he scored a penalty in a 1–0 victory over defending champions Real Madrid in the Champions League, ending their unbeaten streak since May 2023.
On September 28, 2024, David scored a hat-trick in a 3–0 away win over Le Havre. On November 5, 2024, on the fourth day of 2024–25 UEFA Champions League league phase, he scored a goal against Juventus and became Lille’s European competitions topscorer with 13 goals. On May 14, 2025, David announced his departure from Lille at the end of the season, concluding a five-year tenure with the club. He left as the club's third all-time top goalscorer.
Juventus
On July 23, 2025, after 5 seasons with Lille and leaving the club unattached, David signed for Serie A club Juventus until June 30, 2030. The financial details of the agreement include commissions and a bonus-signing of €12.5 million (CA$20.03 million) payable in three seasons. According to various reports, his five-year contract includes an annual salary around €6 million (CA$9.62 million) net plus €2 million (CA$3.21 million) in possible bonus payments per season. On August 24, 2025, David scored in his Juventus debut, their first Serie A match of the season and the opening goal of a 2–0 home win over Parma.
Following a difficult start to the season, David was named player of the match on January 6, 2026, after recording a goal and an assist in a 3–0 win over Sassuolo. On April 19, 2026, David opened the scoring inside the first two minutes of Juventus' 2–0 win over Bologna, heading in a cross from Pierre Kalulu.
Loan to Atlético Madrid
On September 1, 2026, David signed for La Liga club Atlético Madrid on a loan until the end of the season. On September 20, he scored against Real Madrid, becoming the first Canadian to score in the Madrid derby and the first Atlético Madrid player in 31 years to score in each of his first three league matches for the club.