The Liberal Democrats have caused a major upset in the Richmond Park by-election, overturning a 23,015 majority to oust ex-Tory MP Zac Goldsmith.
Mr Goldsmith stood as an Independent after leaving the Conservative Party in protest at the government's decision to back a third Heathrow runway.
But Lib Dem Sarah Olney, who is also opposed to Heathrow expansion, fought the campaign on the issue of Brexit.
She polled 20,510 votes to Mr Goldsmith's 18,638.
The remaining six candidates, including Labour's Christian Wolmar, all lost their £500 deposits as they did not receive a big enough share of the vote.
The Conservative Party, UK Independence Party and Green Party did not field candidates.Image copyright PA Image caption Ms Olney polled 20,510 votes to Mr Goldsmith's 18,638
As the new Lib Dem MP for Richmond Park and North Kingston, Ms Olney will be the party's only female MP - joining eight male colleagues.
She said the by-election result was a rejection of the "politics of anger and division".
She added: "The people of Richmond Park and North Kingston have sent a shockwave through this Conservative Brexit government, and our message is clear - we do not want a hard Brexit.
"We do not want to be pulled out of the single market, and we will not let intolerance, division and fear win."Image copyright AFP/Getty Images Image caption Eight candidates stood in the by-election
Liberal Democrat leader Tim Farron said: "This was a remarkable, come-from-nowhere upset that will terrify the Conservatives.
"A year and a half ago, their man won by nearly 40% and had a majority of more than 20,000.
"In one fell swoop we have wiped that out completely."
Who is Sarah Olney?Image copyright Getty Images
A relative newcomer to politics, Sarah Olney said she was compelled to join the Liberal Democrats after the 2015 general election.
In her victory speech, she said: "A year and a half ago I wasn't involved in politics, I wasn't a member of a political party, I had never been involved in a political campaign, I had never thought about being a politician.
"But I knew I was a liberal.
"When I saw what happened in the general election last year I felt I had to get involved."
Ms Olney, who lives in North Kingston with her husband Ben and two children, works as a qualified accountant at the National Physical Laboratory in Teddington.
The south-west London constituency - which encompasses Richmond, North Kingston and New Malden - voted by a large majority for Remain in the EU referendum on 23 June.
Mr Goldsmith, who campaigned for Leave in the referendum, quit as the Tory MP for the constituency in October so he could fight a by-election as an independent on an anti-Heathrow Airport expansion ticket.
At the time, the Conservatives said they "disagreed" with Mr Goldsmith's decision but would not field a candidate against him.Image copyright Getty Images Image caption Mr Goldsmith stood down as a Conservative MP in protest at the government's decision to back a third Heathrow runway
After his by-election defeat was announced, Mr Goldsmith said: "This by-election was not a political calculation.
"It was a promise that I made and it was a promise that I kept.
"I wish Sarah well in her very, very important job and I hope she serves this community as well as this community deserves."
It was the second political defeat for Mr Goldsmith this year, who was beaten by Labour's Sadiq Khan in the London mayoral election.Image copyright PA Image caption Mr Goldsmith, pictured behind the One Love Party candidate, stood down as MP in October
A Conservative Party spokesman said the result would make no difference to Brexit plans.
He said: "This result doesn't change anything.
"The government remains committed to leaving the European Union and triggering Article 50 by the end of March next year.
- Sarah Olney (Liberal Democrats) - 20,510
- Zac Goldsmith (Independent) - 18,638
- Christian Wolmar (Labour Party) - 1,515
- Howling Laud Hope (The Official Monster Raving Loony Party) - 184
- Fiona Natasha Syms, (Independent) - 173
- Dominic Francis Stockford, (Christian Peoples Alliance) - 164
- Maharaja Jammu and Kashmir (One Love Party) - 67
- David Powell - 32
Turnout = 53.6%
Ms Olney was elected with a majority of 1,872 votes, compared to a Conservative Party majority of 23,015 at the 2015 General Election.