 
 public func ||(p1:Predicate, p2:Predicate) -> Predicate {
     switch (p1, p2) {
+    case (.null, .null):
+        return .null
+    case (.null, let p2):
+        return p2
+    case (let p1, .null):
+        return p1
     case (.bool(let p1), .bool(let p2)):
         return p1 || p2
     case (let p1, .bool(let p2)):

        return SQL(query: columns, parameters: [])
    }
    
    func render<DS: Dataset>(dataset:DS) -> SQL {
        let aliases = toMap(dataset.tables.reversed().enumerated().map { (i, table) in
            (table.name, name(at: i))
        })
        
        let columns = render(columns: dataset, aliases: aliases)
        let source = dataset.render(dialect: self, aliases: aliases)
        
        let sql = "SELECT " + columns + " FROM " + source + ";"
        let paramsFixed = sql.parameters.map { param -> Any? in
            param.map { value in
                switch value {


public func &&(p1:Predicate, p2:Predicate) -> Predicate {
    switch (p1, p2) {
    case (.null, .null):
        return .null
    case (.null, let p2):
        return p2
    case (let p1, .null):
        return p1
    case (.bool(let p1), .bool(let p2)):
        return p1 && p2
    case (let p1, .bool(let p2)):
