SQL Tips : ANSI_NULLS

La seguente query :


SELECT DISTINCT Color from Production.Product
WHERE Color IS NOT NULL;


come sappiamo tutti ritorna la lista dei Color dalla tabella Product non considerando i valori che sono a NULL.

ma se scriviamo la stessa query utilizzando l’operatore di confronto “diverso da” (<>) non otteniamo lo stesso risultato!

SELECT DISTINCT Color from Production.Product
WHERE Color <> NULL;

Questo perchè di default Sql Server ha impostato il flag ANSI_NULLS su ON e quindi non è possibile equiparare i valori a NULL e darà come risultato “unknown”.

Per poter far si che l’operatore “<>” venga considerato bisogna settare il flag ANSI_NULLS OFF in questo modo:


USE AdventureWorks

GO

SET ANSI_NULLS OFF;

SELECT DISTINCT Color from Production.Product
WHERE Color <> NULL;

riferimento : MCTS_70-433 Training Kit MS SQL Server 2008 Database Development

Share

luglio 14, 2010 · admin · 2 Comments
Posted in: Coding, Programmazione, SQL

2 Responses

  1. Rosalie Z. Barr - giugno 6, 2013

    Se i dati includono valori Null, gli operatori logici e di confronto possono restituire potenzialmente un terzo valore, ovvero UNKNOWN, anziché TRUE o FALSE . Questa logica a tre valori, anche se necessaria, è causa di numerosi errori nelle applicazioni. Nelle tabelle riportate di seguito viene descritto il risultato ottenuto dal confronto tra valori Null.

  2. Nelson Simpson - giugno 7, 2013

    Se i dati includono valori Null, gli operatori logici e di confronto possono restituire potenzialmente un terzo valore, ovvero UNKNOWN, anziché TRUE o FALSE . Questa logica a tre valori, anche se necessaria, è causa di numerosi errori nelle applicazioni. Nelle tabelle riportate di seguito viene descritto il risultato ottenuto dal confronto tra valori Null.

Leave a Reply