Haddin was selected in the first ever Mercantile Mutual Cup season of 1997–98 for the Canberra Comets, with whom he began his professional cricketing career. In the 1999–2000 season, he began playing for the New South Wales Blues to pursue further cricketing opportunities. Since then, he has produced several memorable batting innings, including a top score of 133 against Victoria.

In September 2003, he replaced Simon Katich as captain of New South Wales, while Katich was on international duty, and he since been acting-captain on numerous occasions. He has also captained Australia A.

For most of his career he was Australia A wicketkeeper but was drafted into the Australian squad as wicketkeeper if Adam Gilchrist was injured or rested. He made his international debut in a One Day International on 30 January 2001 against Zimbabwe in Hobart. He made one stumping and made 13 runs. He was demoted from second choice wicketkeeper for Australia in 2001 by Wade Seccombe and later Ryan Campbell, but reclaimed this position in late 2004.

On 18 September 2006, playing against West Indies at Kuala Lumpur in the DLF Cup, Haddin and Australian captain Mike Hussey put on 165, which at that time was a world-record stand for the sixth wicket in ODIs.