AAP candidate Ram Chandra got 59,886 votes against 35,834 votes of the BJP's Ved Prakash.
Bawana constituency of Delhi had witnessed a turnout of 44.84 percent - much below the 61.83 percent in the assembly polls in 2015.
Congress' Surender Kumar, a three-time MLA, finished third though the party sought to find solace in doubling its votes from around 14,000 to 31,919 votes.
"The AAP won, but their vote-share has come down despite their government being in power".
The BJP's defeat in Bawana just four months after its massive victory in MCD elections and one-sided win in Rajouri Garden bypolls is nearly like a U-turn by voters in Delhi.
Yemen air strike kills 12, including six children
They have been at war for two years in a conflict that has killed at least 10,000 people and displaced two million since 2015. The United States also regularly conducts deadly drone strikes on Yemen that Washington says target Al-Qaeda.
The by-election was necessitated after AAP legislator Ved Prakash quit the Delhi Assembly just ahead of the municipal polls to join the BJP. Then tally the votes polled with the paper trail at 5 or 15 per cent of the polling booths. Having lost Pratapsingh's ambitious son to the BJP, the Congress could well be staring at the loss of at least three seats to the saffron party in this part of interior Goa in the future if it doesn't work to counter the Ranes' influence in the Sattari taluka. The former defence minister returned to Goa to lead the coalition in March after the Goa Forward Party and Maharashtrawadi Gomantak Party insisted that Parrikar hold the reins of any government they supported. The Congress is down from 17 seats to 16, but remains the single-largest party in the House.
Goa chief minister Manohar Parrikar was declared the victor from Panaji with a margin of 4,803 votes.
Andhra Pradesh's ruling Telugu Desam Party (TDP) snatched the Nandyal seat by a huge margin. Parrikar won from Panaji with a margin of 4,803 votes. This by-poll was necessary after the death of sitting MLA Bhuma Nagi Reddy who had won the seat by a margin of 3,600 votes as YSRC candidate in 2014 but switched over to the TDP in February 2016. Rane left the Congress and joined the BJP to become the health minister in the Parrikar cabinet.
In Andhra Predesh's Nandyal Assembly seat, TDP candidate B Brahmananda Reddy defeated YSRCP rival S Mohan Reddy by more than 27000 votes.
Defeating the chief minister in a constituency that has remained saffron - though not always with significant vote margins - for nearly a quarter century was always going to be a tough prospect for the Congress.