This is definitely a mistake.
There is no need for CTE to create this behavior. The expression below directly has the same effect.
SELECT * FROM
I could reproduce 12.0.2269.0 and 12.0.4213.0, but not 12.0.4449.0, so now it is fixed.
Relevant KB article with details ( FIX: Access violation when a query uses ISDATE or ISNUMERIC functions in a connection condition in SQL Server 2014 SP1 ).
Stack trace when throwing exception below (for search)
KernelBase.dll!RaiseException() msvcr100.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 157 sqldk.dll!ExceptionBackout::GetCurrentException(void) sqldk.dll!ex_raise2(int,int,int,int,void *,char *) sqldk.dll!ex_raise_va_list(int,int,int,int,char *) sqllang.dll!alg_ex_raise(int,int,int,int,int,...) sqllang.dll!CAlgTableMetadata::RaiseBadTableException(int,int) sqllang.dll!CAlgTableMetadata::Bind(class CRelOp_Query *,class COptExpr *) sqllang.dll!CRelOp_Get::BindTree(class COptExpr *,class CBindEnv *,int) sqllang.dll!COptExpr::BindTree(class CBindEnv *,int) sqllang.dll!CRelOp_FromList::BindTree(class COptExpr *,class CBindEnv *,int) sqllang.dll!COptExpr::BindTree(class CBindEnv *,int) sqllang.dll!CRelOp_QuerySpec::BindTree(class COptExpr *,class CBindEnv *,int) sqllang.dll!COptExpr::BindTree(class CBindEnv *,int) sqllang.dll!CRelOp_DerivedTable::BindTree(class COptExpr *,class CBindEnv *,int) sqllang.dll!COptExpr::BindTree(class CBindEnv *,int) sqllang.dll!CRelOp_Query::BindCTEList(class CBindEnv *,class COptExpr *) sqllang.dll!CRelOp_SelectQuery::BindTree(class COptExpr *,class CBindEnv *,int) sqllang.dll!COptExpr::BindTree(class CBindEnv *,int) sqllang.dll!CRelOp_Query::FAlgebrizeQuery(class COptExpr *,class CCompExecCtxtStmt const &,enum EObjType,class CSequenceProjectContext *) sqllang.dll!CProchdr::FNormQuery(class CCompExecCtxtStmt const &,class CAlgStmt *,enum EObjType) sqllang.dll!CProchdr::FNormalizeStep(class CCompExecCtxtStmt const &,class CAlgStmt *,class CCompPlan *,bool,class CParamExchange *,unsigned long *) sqllang.dll!CSQLSource::FCompile(class CCompExecCtxt const &,class CParamExchange *) sqllang.dll!CSQLSource::FCompWrapper(class CCompExecCtxt const &,class CParamExchange *,enum CSQLSource::ESqlFunction) sqllang.dll!CSQLSource::Transform(class CCompExecCtxt const &,class CParamExchange *,enum CSQLSource::ESqlState) sqllang.dll!CSQLSource::Execute(class CCompExecCtxtBasic const &,class CParamExchange *,unsigned long) sqllang.dll!process_request(class IBatch *,class SNI_Conn *,enum RequestType) sqllang.dll!process_commands(void *) sqldk.dll!SOS_Task::Param::Execute(class SOS_Task *,void * * const) sqldk.dll!SOS_Scheduler::RunTask(class Worker *) sqldk.dll!SOS_Scheduler::ProcessTasks(class SOS_Scheduler *,class Worker *) sqldk.dll!SchedulerManager::WorkerEntryPoint(class Worker *) sqldk.dll!SystemThread::RunWorker(class Worker *) sqldk.dll!SystemThreadDispatcher::ProcessWorker(class SystemThread *) sqldk.dll!SchedulerManager::ThreadEntryPoint(void *) kernel32.dll!BaseThreadInitThunk() ntdll.dll!RtlUserThreadStart()