qualquer ordem.Dizemos que as duas primeiras restricoes sao restricoes de coluna, enquanto a terceira e uma restricao de tabela, porque esta escrita separado das definicoes de colunas. As restricoes de coluna tambem podem ser escritas como restricoes de tabela, enquanto o contrario nem sempre e possivel, porque supostamente a restricao de coluna somente faz referencia a coluna em que esta anexada (O PostgreSQL nao impoe esta regra, mas deve-se segui-la se for desejado que a definicao da tabela sirva para outros sistemas de banco de dados). O exemplo acima tambem pode ser escrito do seguinte modo:CREATE TABLE produtos ( cod_prod integer, nome text, preco numeric, CHECK (preco > 0), preco_com_desconto numeric, CHECK (preco_com_desconto > 0), CHECK (preco > preco_com_desconto));ou aindaCREATE TABLE produtos ( cod_prod integer, nome text, preco numeric CHECK (preco > 0), preco_com_desconto numeric, CHECK (preco_com_desconto > 0 AND preco > preco_com_desconto));E uma questao de gosto.Podem ser atribuidos nomes para as restricoes de tabela da mesma maneira que para as restricoes de coluna:CREATE TABLE produtos ( cod_prod integer, nome text, preco numeric, CHECK (preco > 0), preco_com_desconto numeric, CHECK (preco_com_desconto > 0), CONSTRAINT chk_desconto_valido CHECK (preco > preco_com_desconto));Deve ser observado que a restricao de verificacao esta satisfeita se o resultado da expressao de verificacao for verdade ou o valor nulo. Como a maioria das expressoes retorna o valor nulo quando um dos operandos e nulo, estas expressoes nao impedem a presenca de valores nulos nas colunas com restricao. Para garantir que a coluna nao contem o valor nulo, deve ser utilizada a restricao de nao nulo descrita a seguir.Restricoes de nao-nuloUma restricao de nao-nulo simplesmente especifica que uma coluna nao pode assumir o valor nulo. Um exemplo da sintaxe:CREATE TABLE produtos ( cod_prod integer NOT NULL, nome text NOT NULL, preco numeric);A restricao de nao-nulo e sempre escrita como restricao de coluna. A restricao de nao-nulo e funcionalmente equivalente a criar uma restricao de verificacao CHECK (nome_da_coluna IS NOT NULL), mas no PostgreSQL a criacao de uma restricao de nao-nulo explicita e mais eficiente. A desvantagem e que nao pode ser dado um nome explicito para uma restricao de nao nulo criada deste modo.Obviamente, uma coluna pode possuir mais de uma restricao, bastando apenas escrever uma restricao em seguida da outra:CREATE TABLE produtos ( cod_prod integer NOT NULL, nome text NOT NULL, preco numeric NOT NULL CHECK (preco > 0));A ordem das restricoes nao importa, porque nao determina, necessariamente, a ordem de verificacao das restricoes.A restricao NOT NULL possui uma inversa: a restricao NULL. Isto nao significa que a coluna deva ser nula, o que com certeza nao tem utilidade. Em vez disto e simplesmente definido o comportamento padrao dizendo que a coluna pode ser nula. A restricao NULL nao e definida no padrao SQL, nao devendo ser utilizada em aplicativos portaveis (somente foi adicionada ao PostgreSQL para torna-lo compativel com outros sistemas de banco de dados). Porem, alguns usuarios gostam porque torna facil inverter a restricao no script de comandos. Por exemplo, e possivel comecar comCREATE TABLE produtos ( cod_prod integer NULL, nome text NULL, preco numeric NULL);e depois colocar