SQL geral: alterações nas mensagens de erro de subconsultas (pendente)

Atenção

Esta mudança de comportamento faz parte do pacote 2026_01.

Para saber o status atual do pacote, consulte Histórico do pacote.

As mensagens de erro de subconsultas têm o seguinte comportamento:

Antes da mudança:

Quando uma subconsulta retorna um erro, a mensagem de erro não contém informações específicas sobre o código SQL ou o objeto.

Após a mudança:

Quando algumas subconsultas retornam um erro, a mensagem de erro contém informações específicas, como os seguintes detalhes:

  • A linha e a posição do código incompatível na subconsulta.

  • O nome do objeto, como uma exibição ou função, que contém a subconsulta incompatível. Quando os objetos são aninhados, o nome do objeto mais externo é retornado. Por exemplo, se uma exibição com uma subconsulta incompatível está aninhada em uma exibição segura, a mensagem de erro mostra o nome da exibição segura.

  • O nome do tipo de objeto, como uma política de mascaramento, que contém a subconsulta incompatível.

Não há alterações nos códigos de erro relacionados a subconsultas.

Nota

Essa mudança de comportamento não se aplica a subconsultas em junções laterais ou funções de tabela definidas pelo usuário (User-Defined Table Functions, UDTFs).

Exemplos

Os exemplos a seguir mostram alterações nas mensagens de erro de subconsultas.

Crie três tabelas e insira dados em cada uma delas:

CREATE TABLE testsub1(a INT, b INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);

CREATE TABLE testsub2(x INT, y INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);

CREATE TABLE testsub3(u INT, v INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);
Copy

Essas tabelas são usadas nos exemplos a seguir:

Subconsulta incompatível

Execute uma subconsulta incompatível que retorna um erro:

SELECT *
  FROM testsub1
  WHERE a IN(
    SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u
  );
Copy

Essa consulta retorna um erro porque a coluna correlacionada a está na cláusula ON de uma junção esquerda.

Antes da mudança de comportamento, o seguinte erro era retornado:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

Após a mudança de comportamento, o seguinte erro é retornado:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated at line 4, position 4

Exibição segura com uma subconsulta incompatível

Crie uma exibição segura com uma subconsulta incompatível e consulte a exibição:

CREATE SECURE VIEW svw
  AS SELECT *
    FROM testsub1
    WHERE a IN (
      SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u);

SELECT * FROM svw;
Copy

Antes da mudança de comportamento, o seguinte erro era retornado:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

Após a mudança de comportamento, o seguinte erro é retornado:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside VIEW object: SVW

Política de mascaramento com uma subconsulta incompatível

Crie uma política de mascaramento com uma subconsulta incompatível, altere uma tabela para usar a política de mascaramento e consulte a tabela:

CREATE MASKING POLICY mp AS
  (i INT) RETURNS INT -> IFF(i < (SELECT MAX(a) FROM svw), i, -1);

CREATE TABLE masked_testsub1(a INT, b INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);

ALTER TABLE masked_testsub1
  ALTER COLUMN a SET MASKING POLICY mp;

SELECT * FROM masked_testsub1;
Copy

Antes da mudança de comportamento, o seguinte erro era retornado:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

Após a mudança de comportamento, o seguinte erro é retornado:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside MASKING POLICY

Ref: 2140