In BOL werden CHARINDEX() und PATINDEX() als nichtdeterministische Stringfunktionen aufgelistet. Warum eigentlich? Man sollte meinen, das ceteris paribus auch bei diesen Funktionen stets ein identisches Ergebnis herauskommt. Richtig, und gleichzeitig nicht! Der Grund, warum beide Funktionen als nichtdeterministisch geführt werden, findet sich dann in den Erklärungen zu PATINDEX():
[...]
Wenn pattern oder expression gleich NULL ist, gibt PATINDEX den Wert NULL zurück, wenn der Kompatibilitätsgrad der Datenbank 70 ist. Ist der Kompatibilitätsgrad der Datenbank 65 oder niedriger, gibt PATINDEX nur dann NULL zurück, wenn sowohl pattern als auch expression gleich NULL sind.
[...]