O'Connell began his career at Blackburn Rovers and came to prominence after captaining Rochdale to promotion from League Two in the 2013–14 season.
[10][11] After having trials with Premier League clubs Everton and Blackburn Rovers, O'Connell was signed by the academy of the latter on a two-year contract in the summer of 2011.
[16] O'Connell received his maiden call into the first team squad on 12 August 2014, being named in the starting line-up for a League Cup first round match versus Scunthorpe United.
[17] After his return,[19] O'Connell's final involvement with the first team came on 3 January 2015, when he remained an unused substitute for a 2–1 FA Cup third round victory over Charlton Athletic.
[22] O'Connell made the first senior appearance of his career on 24 November 2012, replacing Courtney Cameron in the 89th minute of a 1–0 away win against Exeter City.
[26] Consistently good displays saw manager Keith Hill extend O'Connell's loan until the end of 2013–14 in December 2013.
[32][33] O'Connell returned to Blackburn Rovers after his loan expired,[19] having made 19 appearances and scored three goals during his spell with Rochdale.
[17] O'Connell made his long-awaited debut with a start at left back in Brentford's second match of 2015–16, a 4–0 League Cup first round defeat to Oxford United.
[34] A suspension to Harlee Dean in late November saw O'Connell come into the team and he headed his first Brentford goal to level the score at 2–2 in a West London derby with Fulham on 12 December.
[45] On 15 November 2017, O'Connell signed a new four-and-a-half-year contract with Sheffield United, keeping him at Bramall Lane until June 2022.
[47] As part of manager Chris Wilder's system, O'Connell would play as an outside centre-back, overlapping the wing-back to get into a crossing position.
O'Connell was capped once by the England under-18 team, playing the full 90 minutes of a 3–0 friendly victory over Poland on 7 March 2012.