Born in Madrid, Borja arrived in his hometown club Atlético Madrid's youth system at the age of four. He began as a goalkeeper, the position which his father played professionally, but he converted him to a forward so that he could enjoy the game more. He made his senior debut in the 2009–10 season, scoring 12 goals for the reserve team in the Segunda División B. On 15 May 2010, in the campaign's last round, Borja made his first-team and La Liga debut, coming on as a substitute for Tiago in the 58th minute of the match against Getafe. Twenty minutes later, however, he was stretchered off with a serious anterior cruciate ligament injury on his left knee, in an eventual 0–3 home loss. Seven months after his injury, Borja re-appeared with Atlético B, as a substitute in a 1–0 win over Cacereño. After the match, he stated: "I'm very happy. I've passed really bad times and I've suffered, but now I'm prepared to help the team go up in the league table." In late August 2011 Borja was loaned to Real Murcia, recently promoted to the Segunda División. On 30 August of the following year he moved to Huesca also in a temporary deal, scoring nine times for the latter during the season as it ended in relegation. On 27 January 2013, he netted in a 2–1 success at Numancia but was also sent off for a second yellow card. On 28 August 2013, Borja joined Deportivo de La Coruña on a two-year loan. After helping his team return to the top flight at the first attempt, he moved to fellow league clubReal Zaragoza also in a temporary deal, scoring 22 goals in the regular season, contributing to his team's run to the promotion play-off final and earning a spot in the Team of the Season. On 31 July 2015, Borja was loaned to Eibar of the top tier. He scored his first goals in the competition on 23 September, helping to a 2–2 draw at Levante. He was named the La Liga Player of the Month for October, for his goals against Las Palmas, Sevilla and Barcelona.
Swansea City
On 11 August 2016, Swansea City signed Borja on a four-year contract for a club record fee of £15.5 million. He made his debut in the Premier League on 18 September under Francesco Guidolin, replacing Jack Cork for the final eight minutes of a 0–1 loss at Southampton. He scored his first goal on 15 October again off the bench, in a 2–3 defeat away to Arsenal in new manager Bob Bradley's first game in charge. Having started just four matches and having not contributed any more goals as the Swans avoided relegation, Borja entered talks in May 2017 with manager Paul Clement and the board of directors over his future. On 4 July 2017, he was loaned to Málaga in La Liga for one year. Both Málaga and Swansea were relegated from their respective divisions. Borja was loaned again on 16 July 2018, joining Alavés also in the Spanish top division. Back at Swansea for the 2019–20 season, he scored his first goal for them since 2016 in a 2–1 win against Hull City in the first league fixture on 3 August 2019.
On 31 January 2020, Borja joined Aston Villa on a free transfer, leaving Swansea six months before the end of his contract in order to remove himself from their wage bill. Sixteen days after signing, he made his debut as a late substitute in a 3–2 home defeat to Tottenham Hotspur. Borja was released on 25 June 2020.
Borja's father, Miguel Bastón, was also a footballer. A goalkeeper, he also played with Atlético – but only with their reserves – and spent most of his career with Real Burgos.