After a second reading of the bill on Wednesday, it was dismissed by 62 votes to 60, reported news agencies.
The move comes just a month after the parliament voted in favour of the bill in a first reading.
The issue of language teaching at primary school has been on the agenda in German-speaking Switzerland, and particularly Thurgau, for some time.
A 2004 federal education strategy specifies that two modern languages should be taught in Swiss primary schools and that at least one should be a national language.
But many in Thurgau say primary schools don't have the resources to teach two, and that only English should be taught.
The opposing outcomes of Thurgau parliament's two votes shows exactly how divisive the issue is.
Generally it is supported by the Swiss People's Party, the Greens and the Christian-Democrats but opposed by the Liberal-Radicals, Socialists and centre parties.
In between the two votes, the cantonal government attempted to sway the view of parliament by announcing the introduction of new measures aiming to make it easier for schools to teach French at primary level, reported news agencies.
Due to come into effect in 2018/19, the measures include making smaller class sizes uniform across the canton, introducing new teaching materials and allowing struggling students to be exempted.
It is also possible that a similar vote in the neighbouring canton of Zurich had an influence on Thurgau MPs, said news agencies.
In a late May referendum the people of Zurich voted against an initiative proposing only one language be taught at primary level.
The decision of influential Zurich caused similar initiatives in other cantons, including Schwyz and Nidwalden, to be dropped.
Thurgau's saga is not yet over, however.
A final vote in parliament is due at the end of June, and it's likely that the issue will go before the public in a referendum at a later date.