31. září není datum, takže SQL jej nemůže převést na datum.
Kromě toho byste měli pevně zakódovat data ve formátu nespecifické kultury (rrrrMMdd). 01/08/2012 můžete převést na 1. srpna na vašem serveru, ale spustit na jiném a může to být 8. ledna. 20120801 se převede na 1. srpna na všech stroje.
Navíc Proč převádíte data na NVARCHAR ? Odstraňujete veškeré výhody indexů, které máte, a také provádíte zbytečné implicitní a explicitní konverze. Za předpokladu MESSAGEINSERTDATE je sloupec DATETIME, který můžete použít pouze
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Pokud potřebujete odstranit čas z MESSAGEINSERTDATE použití
CAST(MESSAGEINSERTDATE AS DATE)