Seu exemplo é inválido de duas maneiras:
- Não é permitido ter um prefixo de namespace sem uma declaração de namespace correspondente.
- Seu fechamento as tags não incluem o
/
em todos os lugares...
Este é um hack feio, mas você pode tentar isso:
DECLARE @Params XML
SET @Params = REPLACE('<filter>
<ns0:from>2016-09-19</ns0:from>
<ns0:to>2017-01-01</ns0:to>
</filter>','ns0:','');
SELECT @Params.value('(/*:filter/*:from)[1]', 'date') AS [from];
Se você não souber todos os prefixos de namespace com antecedência, isso ficará muito complicado ...