Consider the following views and CTE:
CREATE OR REPLACE VIEW SubSet (Id)
AS (
SELECT '123'
UNION ALL SELECT '456'
UNION ALL SELECT 'x'
)
CREATE OR REPLACE VIEW MainSet (Id)
AS (
SELECT 123
UNION ALL SELECT 456
UNION ALL SELECT 789
)
WITH myCte (id, cnt) AS
(
SELECT id, 1 AS cnt FROM SubSet
UNION ALL
SELECT id
,cnt + 1 FROM myCte WHERE cnt < 4 AND id <> 'x'
)
SELECT *
FROM MainSet ms
JOIN (
SELECT id FROM myCte WHERE id <> 'x'
) X ON ms.id = X.id
Notice that 'x' is filtered out, both on the recursive part of the CTE and on the Sub Query from the CTE.
This worked yesterday. But as of today, it fails with "Numeric value 'x' is not recognized".
If I remove the recursive part, it won't fail:
WITH myCte (id, cnt) AS
(
SELECT id, 1 AS cnt FROM SubSet
--UNION ALL
--SELECT id
--,cnt + 1 FROM myCte WHERE cnt < 4 AND id <> 'x'
)
SELECT *
FROM MainSet ms
JOIN (
SELECT id FROM myCte WHERE id <> 'x'
) mc ON ms.id = mc.id
How can the query match on 'x' when it is filtered out? It only seems to apply when using recursive CTEs.