Are 0–0s dying out?
Football is more attacking than ever, so the goalless draw must be disappearing. Over 10,000 Scottish league matches in 26 seasons, one match in 14 still ends 0–0, and the share hasn't budged.
Beginner
Contents
The claim
"You hardly see a 0–0 these days." Pressing, attacking full-backs and teams that play out from the back, the argument goes, have made the goalless draw an endangered species.
Why people believe it
The highlights make it feel true. Goals are what get replayed, shared and remembered; nobody clips a 0–0. And the few that stick in the mind are the dreadful ones from years ago, which makes it easy to believe they belonged to an older, duller game. Meanwhile, modern football certainly looks more attacking.
The data
Every Scottish Premiership and Championship match from 2000/01 to 2025/26: 10,471 matches in 26 seasons, final scores only, from football-data.co.uk. 2019/20 and 2020/21, cut short or reshaped by COVID, are included with the matches that were played.
The method
For each season, count the 0–0s and divide by the matches played. Then:
- Compare two halves of the period, 2000/01–2012/13 against 2013/14–2025/26, each with a range for how much luck alone could move it.
- Fit a trend line through the 26 seasons.
- Check against goals. A season with fewer goals should have more 0–0s. For each season, a simple Poisson model, the one in the Poisson distribution, says how many 0–0s its goal rate alone would produce.
The evidence
Across all 26 seasons, 767 of 10,471 matches ended 0–0: 7.3%, about one match in 14.
| Seasons | 0–0s | Share | 95% range |
|---|---|---|---|
| 2000/01 to 2012/13 | 395 of 5,304 | 7.45% | ±0.71 |
| 2013/14 to 2025/26 | 372 of 5,167 | 7.20% | ±0.70 |
The recent half has a quarter of a point fewer 0–0s, far inside the range luck alone could produce. The trend line across all 26 seasons actually points slightly up, by half a point a decade, and that's well within the noise too. The most recent season, 2025/26, had the most 0–0s of all: 40 of 408, 9.8%.
So why do some seasons feel full of them?
Because some seasons are. The share swings from 4.2% (2002/03) to 9.8% (2025/26). Two things drive that.
Luck. A season is about 408 matches. Even if the true chance of a 0–0 never changed, the count would wobble from season to season:
$$\sqrt{\frac{0.073 \times 0.927}{408}} \approx 0.013$$
In plain football
- 0.073 is the chance any match ends 0–0; 408 is the number of matches in a season.
- 0.013 means luck alone moves a season's 0–0 share by about 1.3 points either way.
- The seasons actually vary by about 1.5 points, so most of the swing is just luck.
Goals. Seasons with fewer goals have more 0–0s: across the 26 seasons the correlation is −0.58. The gold dots in the chart are what each season's goal rate alone predicts, and they follow the bars. Goals per game haven't trended either: 2.67 a game in the first half of the period, 2.68 in the second. With no fall in goals, there's no reason for 0–0s to rise or fall.
A few more than the simple model expects
The simple Poisson model expects 7.0% of matches to end 0–0; football delivered 7.3%. Low-scoring draws turning up a little more often than a plain Poisson model predicts is well known, and it's exactly what the Dixon-Coles model was built to correct.
Verdict
Not supported. The goalless draw isn't dying out in Scottish football. One match in 14 ended 0–0 in the early 2000s, and one in 14 does now. The share swings from season to season, mostly by luck and partly with the number of goals, but there is no trend. The most recent season had more than any other.
Caveats
- Scotland only. The data covers the Premiership and Championship. Other leagues, or other eras before 2000, could tell a different story.
- Two divisions together. The Championship has slightly more 0–0s than the Premiership (8.0% against 6.8% over the period), and both are included.
- Fewer matches in 2019/20 and 2020/21. Seasons cut short or reshaped by COVID carry more luck.
- A trend could still be too small to see. Twenty-six seasons can rule out a big change, not a tiny one.
Reproduce the analysis
The results files are published by football-data.co.uk. Download the Premiership (SC0) and Championship (SC1) files for each season from 2000/01 to 2025/26 and save each under its own name, such as SC0_2425.csv and SC1_2425.csv; they aren't rehosted on this site. Then:
import csv
from math import exp, sqrt
names = [f"{y % 100:02d}{(y + 1) % 100:02d}" for y in range(2000, 2026)]
seasons = [] # (season, matches, 0-0s, goals per game, 0-0s a simple Poisson model expects)
for s in names:
n = nil = goals = expect = 0
for div in ("SC0", "SC1"): # Premiership and Championship
with open(f"{div}_{s}.csv", encoding="latin-1") as f:
games = [r for r in csv.DictReader(f) if r.get("FTR") in ("H", "D", "A")]
home = sum(int(r["FTHG"]) for r in games) / len(games)
away = sum(int(r["FTAG"]) for r in games) / len(games)
n += len(games)
nil += sum(r["FTHG"] == "0" and r["FTAG"] == "0" for r in games)
goals += sum(int(r["FTHG"]) + int(r["FTAG"]) for r in games)
expect += len(games) * exp(-home - away) # chance neither side scores, at this division's goal rates
seasons.append((s, n, nil, goals / n, expect / n))
print(f"20{s[:2]}/{s[2:]}: {nil:2} of {n} matches 0-0, {nil / n:.1%}; {goals / n:.2f} goals a game; Poisson expects {expect / n:.1%}")
def share(rows):
n, nil = sum(r[1] for r in rows), sum(r[2] for r in rows)
return f"{nil} of {n}, {nil / n:.2%} (95% range ±{1.96 * sqrt(nil / n * (1 - nil / n) / n):.2%})"
print("all seasons:", share(seasons), f"expected {sum(r[4] * r[1] for r in seasons) / sum(r[1] for r in seasons):.2%}")
print("2000/01-2012/13:", share(seasons[:13]))
print("2013/14-2025/26:", share(seasons[13:]))
x, y = list(range(len(seasons))), [r[2] / r[1] for r in seasons]
mx, my = sum(x) / len(x), sum(y) / len(y)
trend = sum((a - mx) * (b - my) for a, b in zip(x, y)) / sum((a - mx) ** 2 for a in x)
print(f"trend: {trend * 1000:+.2f} percentage points a decade")
g = [r[3] for r in seasons]
mg = sum(g) / len(g)
corr = sum((a - mg) * (b - my) for a, b in zip(g, y)) / sqrt(sum((a - mg) ** 2 for a in g) * sum((b - my) ** 2 for b in y))
print(f"goals a game against 0-0 share, correlation {corr:.2f}")
print(f"luck alone moves a 408-match season by about ±{sqrt(my * (1 - my) / 408):.1%}; seasons actually vary by ±{sqrt(sum((b - my) ** 2 for b in y) / len(y)):.1%}")
Spotted a flaw in the method, or have a football claim you'd like tested? Suggest it on LinkedIn, where discussion of these articles happens.